微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog赋值问题

verilog赋值问题

时间:10-02 整理:3721RD 点击:
我想给Din一次赋值如下,但在modelsim中报错。(Din是reg类型 )   
      Din = 1;
      Din = 2;
      Din = 3;
      Din = 4;
      Din = 5;
      Din = 6;
      Din = 7;
      Din = 8;
      Din = 9;
第二行就开始报错,报错显示:tb.v(28): near "=": expecting: IDENT

把整个tb.v内容贴出来吧
让人好理解一点的

这样完全没法理解



    `timescale 1ns/100ps
module tb;
   reg Clk,Rst;
   reg Din,BofIn;
   wire dm,bof;
   wire Dout,BofOut;
      
   IntLvr U1(Clk,Rst,Din,BofIn,dm,bof);
   IntLvr U2(Clk,Rst,dm,bof,Dout,BofOut);
   
   initial begin
         Clk = 0;
         forever #5 Clk = ~ Clk;
      end           
   initial begin
         Rst = 1;
         BofIn = 0;
         #8 Rst = 0;
         #24  BofIn = 1;
         #10  BofIn = 0;
                 
      end
      
   always @(negedge Clk)
      Din = 1;
      Din = 2;
      Din = 3;
      Din = 4;
      Din = 5;
      Din = 6;
      Din = 7;
      Din = 8;
      Din = 9;
      
endmodule      
   报错位置在Din=2这里,报错显示的是tb.v(28): near "=": expecting: IDENT
   我想给Din依次赋值,从1到9。
   请告诉我如何修改?谢谢。



    `timescale 1ns/100ps
module tb;
   reg Clk,Rst;
   reg Din,BofIn;
   wire dm,bof;
   wire Dout,BofOut;
      
   IntLvr U1(Clk,Rst,Din,BofIn,dm,bof);
   IntLvr U2(Clk,Rst,dm,bof,Dout,BofOut);
   
   initial begin
         Clk = 0;
         forever #5 Clk = ~ Clk;
      end           
   initial begin
         Rst = 1;
         BofIn = 0;
         #8 Rst = 0;
         #24  BofIn = 1;
         #10  BofIn = 0;
                 
      end
      
   always @(negedge Clk)
      Din = 1;
      Din = 2;
      Din = 3;
      Din = 4;
      Din = 5;
      Din = 6;
      Din = 7;
      Din = 8;
      Din = 9;
      
endmodule      
   报错位置在Din=2这里,报错显示的是tb.v(28): near "=": expecting: IDENT
   我想给Din依次赋值,从1到9。
   请告诉我如何修改?谢谢。

always @(negedge Clk)
      Din = 1;
      Din = 2;
      Din = 3;
      Din = 4;
      Din = 5;
      Din = 6;
      Din = 7;
      Din = 8;
      Din = 9;
改成
always @(negedge Clk)
begin
      Din = 1;
      Din = 2;
      Din = 3;
      Din = 4;
      Din = 5;
      Din = 6;
      Din = 7;
      Din = 8;
      Din = 9;
end
就应该不会报错了,但是仿真激励并不对的
要想通过这样的方式对 Din 依次赋值,需要
在内部定义一个计数器,然后根据计数器的值
分别给 Din 赋值



    嗯是的,如果那样改,一仿真就死机。
    你说是用计数器给Din赋值,我写了一下:
`timescale 1ns/100ps
module tb;
   reg Clk,Rst;
   reg Din,BofIn;
   wire dm,bof;
   wire Dout,BofOut;
   reg [3:0] cnt;
   
      
   IntLvr U1(Clk,Rst,Din,BofIn,dm,bof);
   IntLvr U2(Clk,Rst,dm,bof,Dout,BofOut);
   
   initial begin
         Clk = 0;
         forever #5 Clk = ~ Clk;
      end           
   initial begin
         Rst = 1;
         BofIn = 0;
         #8 Rst = 0;
         #24  BofIn = 1;
         #10  BofIn = 0;
                 
      end
      
   always @(negedge Clk)
  begin
      cnt <= cnt + 1;
      Din = cnt;
   end
endmodule      
      
   在仿真时还是不对,Din在仿真时只出现一道红线。
   我想给Din依次赋值,从1到9,怎么弄呀?

定义的计数没有初值,所以仿真不出来的
只要给计数器赋个初值就可以的

上一篇:lizhen7799
下一篇:DFT DPV

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top