求解这段verilog语句中的编译错误

2025-02-25 02:41:56
推荐回答(5个)
回答1:

你的if 应该写到always块里面

"if(switch【1:0】==2‘b00)
select<=4'b1111
"
插入always@(posedge clk )与 if(cnt<4)之间。并加上else
另外begin end 块可以去掉。

回答2:

你得说的具体是做什么的,下面的修改是根据你写的,做的简单修改,应该编译是没问题的,建议还是多看看Verilog方面的书
module create_select(switch, clk, select);
input wire [1:0] switch;
input wire clk;
output reg [3:0] select;
reg [5:0] cnt;
initial cnt<= 6'b000000;
always @ (posedge clk)
begin
if(switch[1:0]==2'b00)
select<=4'b1111;
else begin
if(cnt<4)
cnt<=cnt+1;
else
cnt<=0;
end
end
endmodule

回答3:

楼主程序写的很不得要领呀
应该这样写
module create_select(input wire [1:0] switch, input wire clk, output reg [3:0] select);
reg [5:0] cnt;
initial
begin
cnt = 6'b000000;
end

always @(posedge clk)
if(switch[1:0]==2'b00)
select <=4'b1111;
else
if(cnt<4)
cnt<=cnt+1;
else
cnt<=0;

endmodule

回答4:

if要用在always@() begin...end中,而不是把always放在if里面,基础错误啊!!

回答5:

同意以上两位,一般是在时钟的上升沿的时候做判断,在时序电路中我写的时候,第一句一般是always @(。。。。。);我看很多人这么写的。