这个Verilog代码有什么问题?

这个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

我编写了一个模块,用作计数器(秒),在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), .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)
,使用显式灵敏度列表是一种容易陷入麻烦的方法。其次,使用阻塞分配(
=
,而不是
使用表达式实例化模块端口是合法的,但是您建议使用单独的变量是一个好的选择。