如何在verilog中为2to4解码器编写行为级代码?
我想使用Verilog中的for循环为2到4解码器编写一个行为级代码。这是我尝试过的,但我似乎总是得到0的输出:如何在verilog中为2to4解码器编写行为级代码?,verilog,hdl,test-bench,Verilog,Hdl,Test Bench,我想使用Verilog中的for循环为2到4解码器编写一个行为级代码。这是我尝试过的,但我似乎总是得到0的输出: module decoder2x4Beh(a,e,q); input e; input [1:0]a; output reg [3:0]q; integer int_a,i; always @(a) int_a = a; initial begin if(e) begin for(i=0;i<4;i=i+1) begin if(int_a==i)begin q[i]
module decoder2x4Beh(a,e,q);
input e;
input [1:0]a;
output reg [3:0]q;
integer int_a,i;
always @(a) int_a = a;
initial begin
if(e) begin
for(i=0;i<4;i=i+1) begin
if(int_a==i)begin
q[i] = 1'b1;
end
end
end
else q=4'b0;
end
endmodule
模块解码r2x4beh(a,e,q);
输入e;
输入[1:0]a;
输出寄存器[3:0]q;
整数int_a,i;
始终@(a)int_a=a;
初始开始
如果(e)开始
对于decoder2x4Beh
中的(i=0;i),更改:
initial begin
致:
intital
块在时间0仅执行一次,但您希望在其任何输入信号发生变化时执行该块
这是我得到的输出,显示q
变化:
0 enable 0 input code = 00 output q3 0 q2 0 q1 0 q0 0
20 enable 0 input code = 01 output q3 0 q2 0 q1 0 q0 0
30 enable 0 input code = 10 output q3 0 q2 0 q1 0 q0 0
40 enable 0 input code = 11 output q3 0 q2 0 q1 0 q0 0
50 enable 1 input code = 00 output q3 1 q2 0 q1 0 q0 1
60 enable 1 input code = 01 output q3 1 q2 0 q1 1 q0 1
70 enable 1 input code = 10 output q3 1 q2 1 q1 1 q0 1
80 enable 1 input code = 11 output q3 1 q2 1 q1 1 q0 1
90 enable 0 input code = 00 output q3 0 q2 0 q1 0 q0 0
100 enable 0 input code = 01 output q3 0 q2 0 q1 0 q0 0
110 enable 0 input code = 10 output q3 0 q2 0 q1 0 q0 0
您有几个问题:
decoder2x4Beh中的操作代码在时间0仅执行一次,因为您将其放入初始
块中。相反,它应该是始终
块的一部分。例如
始终@*开始
如果(e)开始
对于(i=0;i
always @* begin
0 enable 0 input code = 00 output q3 0 q2 0 q1 0 q0 0
20 enable 0 input code = 01 output q3 0 q2 0 q1 0 q0 0
30 enable 0 input code = 10 output q3 0 q2 0 q1 0 q0 0
40 enable 0 input code = 11 output q3 0 q2 0 q1 0 q0 0
50 enable 1 input code = 00 output q3 1 q2 0 q1 0 q0 1
60 enable 1 input code = 01 output q3 1 q2 0 q1 1 q0 1
70 enable 1 input code = 10 output q3 1 q2 1 q1 1 q0 1
80 enable 1 input code = 11 output q3 1 q2 1 q1 1 q0 1
90 enable 0 input code = 00 output q3 0 q2 0 q1 0 q0 0
100 enable 0 input code = 01 output q3 0 q2 0 q1 0 q0 0
110 enable 0 input code = 10 output q3 0 q2 0 q1 0 q0 0
always @* begin
if(e) begin
for(i=0;i<4;i=i+1) begin
if(int_a==i)begin
q[i] = 1'b1;
end
end
end
else
q=4'b0;
end