这个verilogHDL程序哪里有问题啊……是个十进制四位计数器……

module count16 (
qout,clk,clear_n,incr_n,cout
);
output[15:0] qout;
output cout;
input clk; //clock
input clear_n;
input incr_n; //1start or 0stop
reg qout;

always @(posedge clk);
begin
if (clear_n==0) qout <= 0;
else if(incr_n==0) qout <= qout;
else if(incr_n==1)
begin
if(qout[3:0]==9)
begin
qout[3:0] <=0;
if(qout[7:4]==9)
begin
qout[7:4] <=0;
if(qout[11:8]==9)
begin
qout[11:8] <=0;
if(qout[15:12]==9) qout[15:12] <=0;
else
qout[15:12]<=qout[15:12]+1;
end
else
qout[11:8]<=qout[11:8]+1;
end
else
qout[7:4]<=qout[7:4]+1;
end
else
qout[3:0]<=qout[3:0]+1
end
end

endmodule

首先在reg qout处就错了,应该为reg 【15:0】 qout;

其次always @(posedge clk);后面没有分号的,应去掉;

再者 qout[3:0]<=qout[3:0]+1后面缺少分号,应加上;

最后还没有cout输出信号;

我在你的基础上稍微改了下,仿了下是正确的,可以见仿真的波形图

程序如下:

module count16 ( 

    qout,clk,clear_n,incr_n,cout

    );

 output[15:0] qout;

 output cout;

 input clk;         //clock

 input clear_n;

 input incr_n;         //1start or 0stop

 

 reg [15:0] qout;

 reg cout;

 

 always @(posedge clk)

 begin

  if (clear_n==0)

   begin 

    qout <= 16'b0;

    cout <= 1'b0;

   end

  else begin

     if(incr_n==0) qout <= qout;

     else 

      begin

       if(qout[3:0]==4'h9) 

        begin 

        qout[3:0] <=4'b0;

         if(qout[7:4]==4'h9)  

          begin 

           qout[7:4] <=4'b0;

           if(qout[11:8]==4'h9)  

            begin 

              qout[11:8] <=4'h0;

              if(qout[15:12]==4'h9) 

               begin 

                qout[15:12] <=4'b0;

                cout <= 1'b1;

               end

                

              else 

               qout[15:12]<=qout[15:12]+1;

            end

           else 

            qout[11:8]<=qout[11:8]+1;

          end

        else 

        qout[7:4]<=qout[7:4]+1;

       end

      else 

      qout[3:0]<=qout[3:0]+1;

     end

  end

 end

 

endmodule

温馨提示:内容为网友见解,仅供参考
无其他回答

verilog hdl程序中出现错误,在哪里能看到错误原因?
在编译完成后,一般会在程序的下半部分出现编译的结果,如果有错误或者警告会以红色字体标注,可以使用鼠标点击错误,对应错误的部分会在程序中高亮显示。这种方式与C语言的编写是一样的。如答主这里使用的是Quartus,出现错误会出现如下提示:望采纳!

Verilog HDL位操作的问题
data[7]+data[4]+data[3]+data[2]相加的结果最大可能是3比特,因此被认为是3比特的。data<={data[6:0],(data[7]+data[4]+data[3]+data[2])}中,因为加法运算的结果是3比特,前面是7比特,总共10比特,因此舍弃高2位,结果是{data[4:0],(data[7]+data[4]+data[3]+data[2])}。

quartus Ⅱ编写的Verilog HDL程序有错误(Error (10112)),求高手帮 ...
reg [1:0] c; reg [3:0] r,b;always @ (posedge clk)begin c<=c+1;\/\/主要问题你这边赋值存在问题,你那个不是赋值符号 case(c)0: b=4`B0111; 1: b=4`B1011; 2: b=4`B1101; 3: b=4`B1110;endcase case({b,a})8`B0111_1110 : r=4`H0; 8`B0111_1101 : r=4`H...

Verilog HDL程序有个问题,希望大虾帮忙解决下Error (10119): Verilog H...
先不说你这个问题。既然你是用原理图做出来了,那就是说你是想硬件实现喽。这样的话,这些行为模型是不行的。这玩意不能变成硬件。always里不能嵌套forever。

我的问题是用Verilog HDL语言写的程序,能编译过去,就是在生成symbol元件...
我的问题是用Verilog HDL语言写的程序,能编译过去,就是在生成symbol元件是出现错误。 Error(10703):SystemVerilogerroratstep_motor.v(308):can'tresolveaggregateexpressioninconnectiontoport2oninstance"fun2"becausetheinstancehasnomodulebinding。... Error (10703): SystemVerilog error at step_motor.v(308): ...

verilog程序问题,还是quartus的问题??
1,object "count_clr" on left-hand side of assignment must have a net type 这个意思是assign语句只能对wire型变量赋值。2,Error (10137): Verilog HDL Procedural Assignment error at fre_ctr.v(6): object "count_en" on left-hand side of assignment must have a variable data type在...

每个Verilog HDL程序包括哪4个主要部分
每个Verilog程序包括四个主要部分:端口定义、I\/O说明、内部信号声明、功能定义。Verilog HDL是一种用于数字逻辑电路设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog HDL既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和...

Verilog HDL 模60 BCD码加法计数器 程序段如图所示:为什么要判断高位是 ...
因为高四位表征十位,低四位表征个位。这是一个模60的计数器,说明它的计数范围是0到59,所以在个位计数到9时,要判断十位是不是5了,如果是了,就需要归零

verilog include问题,就是两个.V文件,下面是程序希望帮忙看看,初学,谢谢...
请删除第一行 `include"LED2.v" ,这样就可以了。

verilog hdl,repeat语句中途能退出吗?
也就是电路实现。至于你后面说的循环、跳出循环体之类,还是在其他编程语言的思路中。在Verilog中实现应该是写一个4bit计数器从0-15计数。 另外一个always块判断计数器的值,如果是15就产生某个脉冲信号,其他always块判断对应脉冲信号是否为高,如果为高就执行对应动作。

相似回答