Verilog HDL文件有什么错误

来源:百度知道 编辑:UC知道 时间:2024/05/24 08:05:10
文件逻辑很简单,就是根据clk,有规律的输出out_1,out_2,out_3,out_4,请求达人帮忙看看 有没有什么错误。发现越多,奖励越多。谢谢

module Control_top(clk,out_1,out_2,out_3,out_4);

input clk;
output out_1;
output out_2;
output out_3;
output out_4;

reg out_1;
reg out_2;
reg out_3;
reg out_4;

reg counter=0; //计数器
reg roundAmt=0; //周期数,计数到一定数,周期加一
reg level=0; //不同的阶段,周期到一定数,阶段数加一

always@(posedge clk) //1/32ms
begin
case(level)
3'b001://level=1
begin
casex(counter)
4'b0xxx:
begin
out_1=0;
out_2=1;
out_3=1;
out_4=1;
end
4'b1000:
begin
out_1=0;
out_2=1;
out_3=1;
out_4=1;
end
begin
out_1=0;
out_2=0;
out_3=1;
out_4=1;
end
default:
begin
out_1=1;
out_2=1;
out_3=1;

3'b001://level=1
需要reg [2:0]level=3'b000;
casex(counter) 改为case(counter)
需要reg [3:0]counter=4'b0000;
counter=counter+1; 改为counter<=counter+1;
counter=0;
roundAmt=roundAmt+1;
都改为<=
roundAmt=0;
level=2;
同样都改为<=

希望你的程序能编译通过

reg counter=0;
reg roundAmt=0;
reg level=0;

以上这几个句子可能有点问题,我在又的书上看到过类似定义,但是在编译的时候通不过,最好别在定义的时候赋值;要不您重新试一下

reg counter=0; //计数器 这种语句不可以,不能在定义的时候赋值,最好加一个复位的信号,复位的时候给初值。

还有建议你把赋值语句的 = 改成 <= ,时序逻辑用非阻塞赋值。