在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2249|回复: 3

[求助] 学习Verilog中遇到的一个问题

[复制链接]
发表于 2016-3-10 16:46:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
刚开始学写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晚半个周期。不知道这是为什么?
发表于 2016-3-16 10:52:43 | 显示全部楼层
你的代码直接编译有错误的啊
发表于 2016-3-16 10:57:50 | 显示全部楼层





  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



复制代码
发表于 2016-3-16 11:01:38 | 显示全部楼层
我按自己的理解把你code重写了一遍  clk和data能对齐的。

btw,我也只是verilog入门而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-14 21:23 , Processed in 0.019368 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表