微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 学习Verilog中遇到的一个问题

学习Verilog中遇到的一个问题

时间:10-02 整理:3721RD 点击:
刚开始学写Verilog,很简单的一个testbench

  1. `timescale 10ns/1ns module t_test1(x_out, x_clk, x_en);   output x_out;  output x_clk;  output x_en;    reg d_out;   reg d_clk;  reg d_en;  reg[7:0] i;parameter default_clock=1;
  2. assign x_out = d_out;assign x_clk = d_clk;assign x_en = d_en;
  3. initial begin  d_en = 1;  d_out = 1;  d_clk = 1;  //put you code here  #5;  //write1bit(8, 1);  write1bit(10, 1);  write8bit(0, 8'b10101010);  HZstate(7);end
  4. task write1bit(input integer clk_cycle, input integer data);  begin    if (clk_cycle == 0)      begin        d_clk = 0;        d_out = data%2;        #default_clock d_clk = 1;        #default_clock d_clk = 0;      end    else      begin        d_clk = 0;        d_out = data%2;        #clk_cycle d_clk = 1;        #clk_cycle d_clk = 0;    end    endendtask
  5. task write8bit(input integer clk_cycle, input integer data);  begin    d_clk <= 0;    d_out <= data%2;        if(clk_cycle == 0)      begin        for(i=1;i<17;i=i+1)        begin          #default_clock;          d_out <= (data>>(i>>1))%2;          d_clk <= !d_clk;        end      end    else          begin        for(i=1;i<17;i=i+1)        begin          #clk_cycle;          d_out <= (data>>(i>>1))%2;          d_clk <= !d_clk;        end      end    endendtaskendmodule

复制代码



注意write8bit里面的第二句话。如果不加这句话,data的改变总是会比clk晚半个周期。不知道这是为什么?

你的代码直接编译有错误的啊

  1. `timescale 10ns/1ns
  2. module task01(x_out, x_clk, x_en);   
  3.         output x_out, x_clk, x_en;  
  4.         reg d_out, d_clk, d_en;   
  5.         reg[7:0] i;
  6.         parameter default_clock = 1;

  7.         assign x_out = d_out;
  8.         assign x_clk = d_clk;
  9.         assign x_en = d_en;

  10.         initial
  11.                 begin  
  12.                         d_en = 1;  
  13.                         d_out = 1;  
  14.                         d_clk = 1;  //put you code here  
  15.                         #5;   
  16.                         //write1bit(10, 0);  
  17.                         write8bit(0, 8'b10101010);  
  18.                         #5;
  19.                 end

  20.         task write1bit(input integer clk_cycle, input integer data);  
  21.                 begin   
  22.                         if (clk_cycle == 0)      
  23.                                 begin        
  24.                                         d_clk = 0;        
  25.                                         d_out = data%2;        
  26.                                         #default_clock d_clk = 1;        
  27.                                         #default_clock d_clk = 0;      
  28.                                 end   
  29.                         else      
  30.                                 begin        
  31.                                         d_clk = 0;        
  32.                                         d_out = data%2;        
  33.                                         #clk_cycle d_clk = 1;        
  34.                                         #clk_cycle d_clk = 0;   
  35.                                 end   
  36.                 end
  37.         endtask

  38.         task write8bit(input integer clk_cycle, input integer data);  
  39.                 begin   
  40.                         if(clk_cycle == 0)      
  41.                                 begin        
  42.                                         for(i = 0; i < 8; i = i+1)        
  43.                                                 begin                                                                 
  44.                                                         d_clk = 1'b0;
  45.                                                         d_out = (data >> i)%2;         
  46.                                                         #default_clock;         
  47.                                                         d_clk = ~d_clk;        
  48.                                                         #default_clock;         
  49.                                                 end      
  50.                                 end   
  51.                         else         
  52.                                 begin        
  53.                                         for(i = 0; i < 8; i = i+1)        
  54.                                                 begin         
  55.                                                         d_clk = 1'b0;
  56.                                                         d_out = (data >> i)%2;         
  57.                                                         #clk_cycle;         
  58.                                                         d_clk = ~d_clk;        
  59.                                                         #default_clock;                                                                 
  60.                                                 end      
  61.                                 end   
  62.                 end
  63.         endtask
  64. endmodule

复制代码

我按自己的理解把你code重写了一遍  clk和data能对齐的。
btw,我也只是verilog入门而已。

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

网站地图

Top