verilog task1

本文介绍了一种使用Verilog语言实现的激励施加机制,该机制能够重复施加特定激励,并通过改变第二阶段的数据来模拟不同的输入情况。文中详细阐述了如何利用for循环和任务(task)来组织代码,以及如何生成时钟信号(TCK)和数据信号(TDI)以符合编程链的要求。

问题描述:

  设计中需要重复多次施加一种激励,每一次激励的施加过程,都可以划分为4个部分,如图所示。

  每一次施加的激励只有第二部分的数据有变化(数据格式无变化)。所以顶层的Testbench代码如下:

 1 reg [4:0]    j;
 2     task bian_chen;
 3         begin
 4             for(j=0;j<=27;j=j+1)begin
 5                 initial_task();
 6                 send_weiliu(j);
 7                 latch_weiliu();
 8                 shaolu();
 9             end    
10         end
11     endtask

  第二部分中有90位数据需要发送,首先申明变量存储数据,如下所述:

1     reg [90:0] TDI_REG [0:27];
2     initial begin
3         $readmemb("weiliu.dat",TDI_REG);
4     end

  第二部分数据发送的具体实现,如下所示:

 1  task send_weiliu;
 2         input [4:0] num;
 3         begin
 4             fork
 5                 TCK_gen();
 6                 TDI_weiliu(num);
 7             join
 8         end
 9     endtask
10     
11     task TCK_gen;
12     begin
13         TCK = 1'b0;
14         repeat(182) #5 TCK = ~TCK;
15         #5 TCK = 1'b0;
16     end
17     endtask
18     
19     reg [6:0] i;
20     task TDI_weiliu;
21         input [4:0] n;    
22         begin
23             for(i=90;i>=0;i=i-1)begin
24                 @(negedge TCK);
25                 TDI = TDI_REG[n][i];
26             end
27         end
28     endtask

说明:

  1)位流数据在时钟上升沿被采样进入编程链寄存器中,所以需要在时钟下降沿处产生好要发送的数据。(见代码24行25行。)

  2)由于编程链是按照D01到D90的顺序串接的,所以最高的D90的位流数据应该最先发送。

  3)由于数据先要在下降沿产生,再在下一个上升沿到来时被采样,所以产生的TCK的数目为182,而非180。同时在TCK的第一次上升延处,由于TDI数据是无效的(还没产生),所以位流文件也要额外的附加一位,位流文件是91位,最高位第91位时无效的。下面通过一个简单时序波形理解这种情形。如下图:

                    图2-1

图2-1中,要发送8位数据D8-D1,TCK信号需要翻转2x8+2=18次,第一个上升沿发送无效数据,第一个下降沿处,产生数据D8。

仿真结果:

上图所示,为多28次数据发送过程的仿真波形图。

上图所示,为多每一次数据发送过程的仿真波形图。

总结:

1.用verilog 写Testbench时,本文介绍的,数据的发送过程中TDI、TCk的产生方式值得借鉴。如在模拟键盘的时钟与数据时可以用到。

  fork
    TCK_gen();
    TDI_weiliu(num);
   join

2.熟悉了for 循环处理重复性工作的用法,特别是语法。

 
 

 

转载于:https://www.cnblogs.com/littleMa/p/5295567.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值