我有这个Verilog代码的问题.基本上,它不会让我做Y = 3'di声明.基本上,我想要Y平等i.我很确定问题是i.那么,有没有办法在Verilog中做到这一点?此外,W是一个8位输入(换句话说,W[7:0]).
for (i = 7; i >= 0; i = i - 1)
begin
if(W[i]) Y=3'di;
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试在Verilog中编写BCD加法器,但我遇到了其中一个模块的问题.具体来说,加法器采用两个BCD数字并添加它们.因此,想法是如果两个数字的总和小于或等于9,那么它是正确的.但是,如果它更大,则必须添加6的偏移量.到目前为止,这是我的Verilog代码:
module DIGITADD(
input [3:0] IN_A,
input [3:0] IN_B,
input CIN,
output reg COUT,
output reg [3:0] SUM
);
wire s2, c2;
always @ ( * )
begin
assign {c2, s2} = IN_A + IN_B + CIN;
if(s2 <= 9 && c2 == 0) begin
assign {COUT, SUM} = {c2, s2};
end
else if({c2, s2} > 9) begin
assign {COUT, SUM} = {c2, s2 + 6};
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
无论如何,当我尝试在Xilinx中进行综合时,我会收到以下错误:
错误:HDLC编译器:247 - "DIGITADD.v"第33行参考标量线'c2'不是合法的注册或变量左值
错误:HDLCompilers:247 - "DIGITADD.v"第33行参考标量线's2'不是合法的注册或变量左值
错误:HDLC编译器:42 - "DIGITADD.v"第33行程序分配的非法左侧
我尝试改变一些事情,比如把电线改成reg,但我仍然无法让它工作.任何帮助表示赞赏.