if else语句要用在always模块里
assign是组合逻辑不需要用在if语句中。
本段要用if语句来表达的话,可以将assign去掉,用always块来写
module 4bitALU ( cout,sum,a,b,m,op,cin );
output cout; // 进(借)位
output [3:0] sum; //result
reg [3:0]sum;
reg cout;
input [3:0] a,b; // 操作数
input cin; //前面的进(借)位
input m; //高电平或低电平
input [1:0] op;//操作符
always@(m or op or a or b or cin)
begin
if(m == 1'b1) //高电平
begin
if(op == 2'b01)// 01执行加
{cout,sum}<=a+b+cin;
else//减
{cout,sum}<=a-b-cin;
end
else//低电平
if(op == 2'b01)//01执行与操作
sum<=a&&b;
else//或
sum<=a||b;(这里我不太明白这逻辑与和或最后sum不就成了一位的了?)
end
endmodule
你的代码适合写到always块里:
always @(m, op, a, b, cin)
if...
else...
...
然后赋值就不用assign了,直接赋值
m为高电平可以写成if(m)就可以了
verilog 和c不大一样,这里需要用到always块
我也遇到过这个问题,你那个M OP编译器认为都不是变量,你先赋给一个变量比如parameter a然后再用a做if 不知道有没有用你试试