这个Verilog代码有什么问题?
我编写了一个模块,用作计数器(秒),在Altera板上的两个七段显示器上显示数字,每个数字一个 以下是模块:这个Verilog代码有什么问题?,verilog,seven-segment-display,Verilog,Seven Segment Display,我编写了一个模块,用作计数器(秒),在Altera板上的两个七段显示器上显示数字,每个数字一个 以下是模块: module assignment2_sevenseg(clkin, seg1_output, seg2_output); input clkin; output reg [6:0] seg1_output; output reg [6:0] seg2_output; reg currentTime; assignment2_sec seconds(.clkin(clkin), .o
module assignment2_sevenseg(clkin, seg1_output, seg2_output);
input clkin;
output reg [6:0] seg1_output;
output reg [6:0] seg2_output;
reg currentTime;
assignment2_sec seconds(.clkin(clkin), .output_sec(currentTime));
always @(currentTime)
begin
digitaltimer timer(currentTime/10, seg1_output); //left segment (line 14)
digitaltimer timer1(currentTime%10, seg2_output); //right segment (line 15)
end
endmodule
assignment2_sec模块是另一个用于计算/增加秒数的模块。它应该工作得很好。我得到的错误在always语句中begin/end语句之间的两行中
错误(10170):赋值2_sevenseg.v处的Verilog HDL语法错误(14)
靠近文本:“(“预期的”)。检查并修复任何语法错误
出现在指定关键字之前或旁边的
我还得到了第15行的确切错误
这是数字定时器模块,仅供参考
module digitaltimer(num , segments);
input [3:0] num ;
output [6:0] segments ;
reg [6:0 ] segments ;
always@(num)
begin
case (num)
0: segments <= ~7'b0111111;
1: segments <= ~7'b0000110;
2: segments <= ~7'b1011011;
3: segments <= ~7'b1001111;
4: segments <= ~7'b1100110;
5: segments <= ~7'b1101101;
6: segments <= ~7'b1111101;
7: segments <= ~7'b0000111;
8: segments <= ~7'b1111111;
9: segments <= ~7'b1101111;
default: segments <= ~7'bx ;
endcase
end
endmodule
模块数字定时器(num,段);
输入[3:0]num;
输出[6:0]段;
reg[6:0]段;
始终@(num)
开始
案例(个)
0:segments我认为这是不合法的:
digitaltimer timer(currentTime/10, seg1_output); //left segment (line 14)
您试图在实例化模块时执行一个数学运算。您应该使用自己的reg变量分别执行除法和模运算,然后将这些运算的输出连接到数字定时器
模块。您正在一个always块中实例化模块。就像您对模块所做的那样e> 分配2秒
模块,您应该“独立”实例化模块,即不在任何程序块中(如始终
,初始
等)。删除始终@(当前时间)开始
和结束
,这样就可以了(我很确定除法和模都很好;但我习惯于使用至少SV-2005,而不是像你那样使用V2K)
还要注意的是,在您的
数字定时器
模块中,首先,使用始终@(*)
而不是始终@(num)
,使用显式灵敏度列表是一种容易陷入麻烦的方法。其次,使用阻塞分配(=
,而不是使用表达式实例化模块端口是合法的,但是您建议使用单独的变量是一个好的选择。