在我之前的一个问题中,我说我被要求设计一个装瓶系统,用所需数量的药片填充瓶子。在我的项目的第1部分中,用户将按下FPGA上的按钮,以确定将在每个瓶子中放入多少平板电脑,并显示所需的数字。这是我为我的项目编写的第1部分的代码,我有不知道为什么它会在模块part1中给出错误。
module count(clk,clr,cntEn,dout);
input clk,clr,cntEn;
output reg [8:0] dout ;
always@(posedge clk)
begin
if(clr)
dout<=0;
else if(cntEn)
dout<=dout+1;
end
endmodule
module sevenseg(num,dout);
input [3:0] num;
output reg [6:0] dout;
always@(*) begin
case(num)
0:dout=7'b1111110;
1:dout=7'b1100000;
2:dout=7'b1011011;
3:dout=7'b1001111;
4:dout=7'b1100110;
5:dout=7'b1101101;
6:dout=7'b1111101;
7:dout=7'b0000111;
8:dout=7'b1111111;
9:dout=7'b1101111;
endcase
end
endmodule
module part1(clk,clr,cntEn,dout);
input clk, clr, cntEn;
output dout;
wire w1;
begin
count count_1 (clk, clr, cntEn, w1);
sevenseg sevenseg_1(w1, dout );
end
endmodule
答案 0 :(得分:0)
错误是由ljk07指出的,模块1中的开始端不是必需的,一些解析器可能只是忽略它们,其他人会抛出错误。它应该是:
module part1(clk,clr,cntEn,dout);
input clk, clr, cntEn;
output dout;
wire w1;
count count_1 (clk, clr, cntEn, w1);
sevenseg sevenseg_1(w1, dout );
endmodule
我认为值得指出的是,除非你受限于Verilog-95然后采用ANSI样式的端口声明,否则它会更容易维护代码。
module part1(
input clk, clr, cntEn,
output dout
);
wire w1;
count count_1 (clk, clr, cntEn, w1);
sevenseg sevenseg_1(w1, dout );
endmodule
模块sevenseg也有一个不完整的case语句,这将导致隐含的锁存器。添加默认值或完全指定num:
的所有选项的输出module sevenseg(num,dout);
input [3:0] num;
output reg [6:0] dout;
always @(*) begin
case(num)
0:dout=7'b1111110;
1:dout=7'b1100000;
2:dout=7'b1011011;
3:dout=7'b1001111;
4:dout=7'b1100110;
5:dout=7'b1101101;
6:dout=7'b1111101;
7:dout=7'b0000111;
8:dout=7'b1111111;
9:dout=7'b1101111;
default: dout='b0;
endcase
end
endmodule