我尝试过这段代码,但它显示了错误:
gray_counter\gray_counter.v(2):(vlog-2110)非法引用网络“代码”
module gray_counter(code,clk,rst,count);//module declaration
input [2:0]code=3'b000;
input clk,rst;
output reg count;
reg [2:0]conv_code;
always@(posedge clk , posedge rst)
begin
if(rst)
begin
count=0;
end
else
begin
conv_code={code[0],code[0]^code[1],code[1]^code[2]};//converting binary code to gray
case(conv_code)
3'b000:count=count+1;
3'b001:count=count+1;
3'b011:count=count+1;
3'b010:count=count+1;
3'b110:count=count+1;
3'b100:count=count+1;
3'b101:count=count+1;
3'b111:count=count+1;
default:count=count+0;
endcase
end
end
endmodule发布于 2021-07-13 22:44:48
Verilog不允许端口具有默认值。要满足Verilog的要求,请将input [2:0]code=3'b000;更改为input [2:0]code;,并且永远不要在gray_counter模块中分配code。
SystemVerilog允许它使用ANSI风格的模块标头(IEEE1802-2012§23.2.2.2 ANSI样式的端口声明列表)。与更新的2017 1800-2017相同的部分。我不能对LRMs中的示例进行罚款,但是语法是很清楚的。在较早的they 1800-2005中,我没有发现它们的语法相同。我没有看到LRMs建议默认分配对于非ANSI头是合法的;但是我确实注意到支持ANSI模块头的默认设置的模拟器也支持非ANSI。
要启用SystemVerilog解析,请将文件扩展名从.v更改为.sv。注意,一些模拟器只支持有限的SystemVerilog特性子集。您的模拟器或合成器可能不支持具有默认值的端口。如果没有,则必须删除默认赋值。
通常,您希望在实例化输入的地方驱动所有输入。通过将默认值分配给输入,可以使连接成为可选的。这在业界并不常见,部分原因是整个工具链(仿真器、合成器、链接器等)。需要支持它,部分原因是编码/调试实践。
使用SystemVerilog,您可以指定一个默认输入,但在大多数情况下,您不应该这样做。
https://stackoverflow.com/questions/68361244
复制相似问题