我写了一个作为计数器(秒)的模块,并在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):assignment2_sevenseg.v上的Verilog HDL语法错误(14) 接近文字:"(&#34 ;;期待&#34 ;;"。检查并修复任何语法错误 出现在指定关键字之前或之前。
我也得到第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
答案 0 :(得分:0)
我认为这不合法:
digitaltimer timer(currentTime/10, seg1_output); //left segment (line 14)
您在实例化模块时尝试执行数学运算。您应该使用自己的reg变量分别执行除法和模运算,然后将这些运算的输出连接到digitaltimer
模块。
答案 1 :(得分:0)
您正在使用always块实例化模块。正如您对assignment2_sec
模块所做的那样,您应该将模块“独立”实例化,即不在任何程序块中(例如always
,initial
等)。删除always @(currentTime) begin
和end
它应该没问题(我很确定除法和模数是好的;但我习惯至少使用SV-2005,而不是V2K)。
另请注意,在digitaltimer
模块中,首先使用always @(*)
代替always @(num)
,使用明确的敏感列表,这是一种容易引发麻烦的方法。其次,在该块中使用阻塞分配(=
,而不是<=
),因为它表示组合逻辑。仅在顺序块中使用NBA(<=
)(如always @(posedge clk)
之类的东西)。最后,~7'bx === 7'bx
所以你不需要它。