我是verilog的初学者,所以我需要你的帮助。 我想为2位7段解码器制作一个代码,但这里有一个我无法识别的语法。
代码:
module segment7dec (input [5:0] bin,output [3:0] bcd0,output [3:0] bcd1);
case (bin)
6'd0 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0000; end
6'd1 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0001; end
6'd2 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0010; end
6'd3 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0011; end
6'd4 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0100; end
6'd5 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0101; end
6'd6 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0110; end
6'd7 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0111; end
6'd8 : begin bcd1 <= 4'b0000; bcd0 <= 4'b1000; end
6'd9 : begin bcd1 <= 4'b0000; bcd0 <= 4'b1001; end
6'd10 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0000; end
6'd11 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0001; end
6'd12 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0010; end
6'd13 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0011; end
6'd14 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0100; end
6'd15 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0101; end
6'd16 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0110; end
6'd17 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0111; end
6'd18 : begin bcd1 <= 4'b0001; bcd0 <= 4'b1000; end
6'd19 : begin bcd1 <= 4'b0001; bcd0 <= 4'b1001; end
6'd20 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0000; end
6'd21 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0001; end
6'd22 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0010; end
6'd23 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0011; end
6'd24 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0100; end
6'd25 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0101; end
6'd26 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0110; end
6'd27 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0111; end
6'd28 : begin bcd1 <= 4'b0010; bcd0 <= 4'b1000; end
6'd29 : begin bcd1 <= 4'b0010; bcd0 <= 4'b1001; end
6'd30 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0000; end
6'd31 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0001; end
6'd32 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0010; end
6'd33 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0011; end
6'd34 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0100; end
6'd35 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0101; end
6'd36 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0110; end
6'd37 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0111; end
6'd38 : begin bcd1 <= 4'b0011; bcd0 <= 4'b1000; end
6'd39 : begin bcd1 <= 4'b0011; bcd0 <= 4'b1001; end
6'd40 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0000; end
6'd41 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0001; end
6'd42 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0010; end
6'd43 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0011; end
6'd44 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0100; end
6'd45 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0101; end
6'd46 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0110; end
6'd47 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0111; end
6'd48 : begin bcd1 <= 4'b0100; bcd0 <= 4'b1000; end
6'd49 : begin bcd1 <= 4'b0100; bcd0 <= 4'b1001; end
6'd50 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0000; end
6'd51 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0001; end
6'd52 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0010; end
6'd53 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0011; end
6'd54 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0100; end
6'd55 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0101; end
6'd56 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0110; end
6'd57 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0111; end
6'd58 : begin bcd1 <= 4'b0101; bcd0 <= 4'b1000; end
6'd59 : begin bcd1 <= 4'b0101; bcd0 <= 4'b1001; end
6'd60 : begin bcd1 <= 4'b0110; bcd0 <= 4'b0000; end
endcase
endmodule
报告的错误:
错误:C:/modeltech64_10.1c/examples/decoder1.v(4):near“&lt; =”:syntax 错误,意外&lt; =,期待IDENTIFIER或TYPE_IDENTIFIER
答案 0 :(得分:3)
两个主要问题,可以使用assign
作为reg
的电话或delcare进行分配,并放置在initial
或always
块中。例如:
module segment7dec (
input [5:0] bin,
output reg [3:0] bcd0, //<-- reg type
output reg [3:0] bcd1);
由触发器驱动的bcd:
always @(posedge clk) begin
case (bin)
6'd0 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0000; end
6'd1 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0001; end
//...
endcase
end
或者对于组合(请注意分配类型的更改):
always @* begin
case (bin)
6'd0 : begin bcd1 = 4'b0000; bcd0 = 4'b0000; end
6'd1 : begin bcd1 = 4'b0000; bcd0 = 4'b0001; end
//...
endcase
end
答案 1 :(得分:2)
阻止您编译此问题有两个问题:
i)case
语句必须在always块中。任何类似的声明(例如if
)必须位于always
块中。如果您不熟悉always
块的概念,则需要了解它们。
always @(*)
case (bin)
ii)默认情况下,输出是电线。您无法从wire
区块中驾驶always
。您只能从reg
块分配给always
。您的输出都必须是reg
。
module segment7dec (input [5:0] bin, output reg [3:0] bcd0, output reg [3:0] bcd1);
您在always块中的赋值也应该是&#34; blocking&#34;,因为这是组合逻辑:
6'd0 : begin bcd1 = 4'b0000; bcd0 = 4'b0000; end