我第一周学习Verilog时遇到了非常令人沮丧的经历。
我正在尝试编译以下代码 - 来自mipsalu.v
module MIPSALU (ALUctl, A, B, ALUOut, Zero);
input [3:0] ALUctl;
input [31:0] A,B;
output reg [31:0] ALUOut;
output Zero;
assign Zero = (ALUOut==0); //Zero is true if ALUOut is 0; goes anywhere
always @(ALUctl, A, B) //reevaluate if these change
case (ALUctl)
0: ALUOut <= A & B;
1: ALUOut <= A | B;
2: ALUOut <= A + B;
3: ALUOut <= A ^ B;
6: ALUOut <= A – B;
7: ALUOut <= A < B ? 1:0;
12: ALUOut <= ~(A | B); // result is nor
default: ALUOut <= 0; //default to 0, should not happen;
endcase
endmodule
当我尝试使用iverilog -o test mipsalu.v
编译时,iverilog告诉我
mipsalu.v:13: syntax error
I give up.
当我删除有问题的行并再次编译时,没有错误 -
module MIPSALU (ALUctl, A, B, ALUOut, Zero);
input [3:0] ALUctl;
input [31:0] A,B;
output reg [31:0] ALUOut;
output Zero;
assign Zero = (ALUOut==0); //Zero is true if ALUOut is 0; goes anywhere
always @(ALUctl, A, B) //reevaluate if these change
case (ALUctl)
0: ALUOut <= A & B;
1: ALUOut <= A | B;
2: ALUOut <= A + B;
3: ALUOut <= A ^ B;
//6: ALUOut <= A – B;
7: ALUOut <= A < B ? 1:0;
12: ALUOut <= ~(A | B); // result is nor
default: ALUOut <= 0; //default to 0, should not happen;
endcase
endmodule
非常感谢任何见解。谢谢!
编辑:值得一提的是我使用MinGW / MSYS在Windows 8.1上运行Icarus Verilog的第10版
答案 0 :(得分:4)
不确定您是如何做到的,但您的ng-repeat="item in SearchItems| filter:searchTerm:strict"
是ISO 8859-1下扩展ASCII中的字符。收到ascii-code.com ASCII码编号为150 DEC(HTML代码–
)。 Verilog期待–
ASCII码编号45 DEC(HTML代码-
)。
两者看起来几乎相同; - (-
)只比 - (–
)长几个像素,至少对某些字体而言。
可能是你的文本编辑器正在动态地改变它,认为破折号看起来更容易阅读。
仅供参考:在Verilog中,您通常希望为组合逻辑分配阻塞分配(-
),并为顺序逻辑分配非阻塞分配(=
)。您对组合逻辑使用非阻塞,应该更改为阻塞。
<=
是合法的,但请注意,还有always @(ALUctl, A, B)
(或always @*
为SystemVerilog),这是一个自动敏感列表。如果您错过了灵敏度列表中的项目,则模拟中的verilog功能行为和合成的功能行为可能会有所不同。
如果要减少某些输入,可能需要尝试ANSI标头样式。已经多次讨论了其他问题(https://stackoverflow.com/search?q=%5Bverilog%5D+ANSI)