如何删除标题中提到的错误?
reg [3:0]count;
reg [6:0]seg;
always @ (posedge clock) begin
if (reset)
count = 0;
else
count = count+1'b0; //starting A counter
end
begin // this seems to need an "always @*" just before "begin"
case(count)
4'b0000: seg = 7'b0000001;
endcase
end
assign {a,b,c,d,e,f,g} = seg;
endmodule // where is "module"?
它显示错误44,即计数不是常数 错误1059,即seg是未知类型。请帮忙。 无法弄清楚接下来该做什么
答案 0 :(得分:0)
这似乎是一个7段计数器,它根据正在运行的4位计数器的值显示十六进制值。
首先,您需要声明模块的输入和输出,这可以完成(在Verilog 2001中),如下所示:
module counter7seg (
input wire clock,
input wire reset,
output wire a,
output wire b,
output wire c,
output wire d,
output wire e,
output wire f,
output wire g
);
这部分描述看起来很不错:一个4位计数器。但是你需要(正如摩根指出的那样)修复两件事:时钟always
内的作业必须是非阻塞的(<=
而不是=
),而你的计数器可以计算,必须添加1
,而不是0
:
always @ (posedge clock) begin
if (reset)
count <= 0;
else
count <= count+1'b1; //starting A counter
end
以下部分,当您获取count
的值并导出细分值时,不完整:此处需要16个案例。
我可以看到您使用否定逻辑来切换片段,因此有效地0000
变为0000001
,0001
变为(仅根据下图中的内容进行猜测){{1 }},.... 1001111
变为1000
,依此类推。
0000000