-
Notifications
You must be signed in to change notification settings - Fork 23
/
74139.v
35 lines (30 loc) · 898 Bytes
/
74139.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Dual 2-line to 4-line decoder/demultiplexer (inverted outputs)
module ttl_74139 #(parameter BLOCKS = 2, WIDTH_OUT = 4, WIDTH_IN = $clog2(WIDTH_OUT),
DELAY_RISE = 0, DELAY_FALL = 0)
(
input [BLOCKS-1:0] Enable_bar,
input [BLOCKS*WIDTH_IN-1:0] A_2D,
output [BLOCKS*WIDTH_OUT-1:0] Y_2D
);
//------------------------------------------------//
wire [WIDTH_IN-1:0] A [0:BLOCKS-1];
reg [WIDTH_OUT-1:0] computed [0:BLOCKS-1];
integer i;
integer j;
always @(*)
begin
for (i = 0; i < BLOCKS; i++)
begin
for (j = 0; j < WIDTH_OUT; j++)
begin
if (!Enable_bar[i] && j == A[i])
computed[i][j] = 1'b0;
else
computed[i][j] = 1'b1;
end
end
end
//------------------------------------------------//
`ASSIGN_UNPACK_ARRAY(BLOCKS, WIDTH_IN, A, A_2D)
assign #(DELAY_RISE, DELAY_FALL) Y_2D = `PACK_ARRAY(BLOCKS, WIDTH_OUT, computed)
endmodule