你好我在verilog中得到以下错误,我不知道为什么似乎无法搞清楚。请帮忙
错误:错误(10170):final_lab.sv上的Verilog HDL语法错误(46) 接近文本“默认”;期待“结束”
代码
module final_lab (CLOCK_50, SW, LEDR, KEY, HEX5, HEX4, HEX3, HEX2, HEX1,HEX0);
input logic CLOCK_50;
input logic [6:1] SW;
input logic [3:0] KEY;
output logic [9:0] LEDR;
output logic [6:0] HEX5, HEX4, HEX3, HEX2, HEX1, HEX0;
logic [6:1] whatWeHave;
logic reset;
logic keyOne , keyThree;
assign whatWeHave = 6'b000000;
always_comb
begin
if (whatWeHave[6:1] == SW[6:1])
begin
keyThree = 0;
keyOne = 0;
whatWeHave = whatWeHave;
end
else if (whatWeHave[6:1] < SW[6:1])
begin
whatWeHave = whatWeHave+1;
keyThree = 1;
keyOne = 0;
end
else if (whatWeHave[6:1] > SW[6:1])
begin
whatWeHave = whatWeHave-1;
keyOne = 1;
keyThree = 0;
end
else
begin
whatWeHave = whatWeHave;
keyOne = 0;
keyThree = 0;
end
default
begin
whatWeHave = 6'bxxxxxx;
keyOne = 1'bx;
keyThree = 1'bx;
end
end
normalLight one (.clk(CLOCK_50), .reset(SW[9]), .L(keyThree), .R(keyZero), .NL(LEDR[2]), .NR(1'b0), .lightOn(LEDR[1]));
normalLight two (.clk(CLOCK_50), .reset(SW[9]), .L(keyThree), .R(keyZero), .NL(LEDR[3]), .NR(LEDR[1]), .lightOn(LEDR[2]));
normalLight three (.clk(CLOCK_50), .reset(SW[9]), .L(keyThree), .R(keyZero), .NL(LEDR[4]), .NR(LEDR[2]), .lightOn(LEDR[3]));
normalLight four (.clk(CLOCK_50), .reset(SW[9]), .L(keyThree), .R(keyZero), .NL(LEDR[5]), .NR(LEDR[3]), .lightOn(LEDR[4]));
normalLightLight five (.clk(CLOCK_50), .reset(SW[9]), .L(keyThree), .R(keyZero), .NL(LEDR[6]), .NR(LEDR[4]), .lightOn(LEDR[5]));
normalLight six (.clk(CLOCK_50), .reset(SW[9]), .L(keyThree), .R(keyZero), .NL(1'b0), .NR(LEDR[5]), .lightOn(LEDR[6]));
endmodule
答案 0 :(得分:1)
在您的逻辑中使用默认的地方是不合适的。 默认关键字通常与案例语句一起使用,而不与 if-else 条件一起使用。
在嵌套的if-else中,最终的else(没有条件)将被执行类似于default。看起来你正试图有两个默认条件。尝试重写你的逻辑。
答案 1 :(得分:0)
与前两个答案相同, if-else 语句中不存在默认。
如果您考虑一下,在默认语句之前就有 else 语句,该语句将涵盖之前未涵盖的所有案例,然后执行默认的操作在案例声明中。
答案 2 :(得分:-1)
这是错误的语法。基本上我们使用默认作为案例语句的最后一部分。您不能将默认与 if-else 语句一起使用。 只需删除默认关键字,然后使用其他 if-else 语句。 或 而不是所有 if-else 语句;您可以在最后一部分使用案例语句和默认关键字。