问题描述:

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

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

 reg [:]    j;
task bian_chen;
begin
for(j=;j<=;j=j+)begin
initial_task();
send_weiliu(j);
latch_weiliu();
shaolu();
end
end
endtask

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

1     reg [:] TDI_REG [:];
initial begin
$readmemb("weiliu.dat",TDI_REG);
end

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

  task send_weiliu;
input [:] num;
begin
fork
TCK_gen();
TDI_weiliu(num);
join
end
endtask task TCK_gen;
begin
TCK = 'b0;
repeat() # TCK = ~TCK;
# TCK = 'b0;
end
endtask reg [:] i;
task TDI_weiliu;
input [:] n;
begin
for(i=;i>=;i=i-)begin
@(negedge TCK);
TDI = TDI_REG[n][i];
end
end
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 循环处理重复性工作的用法,特别是语法。

												

verilog task1的更多相关文章

  1. 简单的Verilog测试模板结构

    这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...

  2. verilog语法实例学习(6)

    函数和任务 函数 https://wenku.baidu.com/view/d31d1ba8dd3383c4bb4cd283.html verilog中函数的目的是允许代码写成模块的方式而不是定义独立 ...

  3. Verilog学习笔记简单功能实现(二)...............全加器

    先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有:   Xi     Yi    Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...

  4. Verilog HDL模型的不同抽象级别

    所谓不同的抽象类别,实际上是指同一个物理电路,可以在不同层次上用Verilog语言来描述.如果只从行为功能的角度来描述某一电路模块,就称作行为模块.如果从电路结构的角度来描述该电路模块,就称作结构模块 ...

  5. Verilog学习笔记基本语法篇(十二)········ 编译预处理

    h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...

  6. Verilog学习笔记基本语法篇(十一)········ 常用系统函数

    1)系统任务:$monitor   格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...

  7. FPGA作为从机与STM32进行SPI协议通信---Verilog实现 [转]

    一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...

  8. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

  9. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

随机推荐

  1. SpringMVC源码学习之request处理流程

    目的:为看源码提供调用地图,最长调用逻辑深度为8层,反正我是springMVC源码学习地址看了两周才理出来的. 建议看完后还比较晕的,参照这个简单的模型深入底层,仿SpringMVC自己写框架,再来理 ...

  2. leetcode988

    public class Solution { private Stack<string> ST = new Stack<string>(); private string S ...

  3. 试用bus hound来分析STM32CubeMX来生成USB_HID_Mouse工程

    Bus Hound (x64). Complements of www.perisoft.net STM32_HID_mouse Device - Device ID (followed by the ...

  4. WPF 透明窗体

    窗体属性中设置:Background="Transparent" AllowsTransparency="True" WindowStyle="Non ...

  5. spring集成mybatis的mybatis参考配置

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC &q ...

  6. ThinkPHP子类继承Controller类的注意事项

    在实际的开发中,往往有很多子类都继承自同一个父类,然后该父类再继承自框架内置类的需求. 比如: class Init extends Controller{...} class son1 extend ...

  7. Bash 翻译

    Bash参考手册 目录 1简介 1.1什么是Bash? 1.2什么是shell? 2定义 3基本外壳功能 3.1 Shell语法 3.1.1外壳操作 3.1.2报价 3.1.2.1逃逸角色 3.1.2 ...

  8. 【转】【java】论integer是地址传递还是值传递

    转自:http://www.tuicool.com/articles/AraaQbZ 论integer是地址传递还是值传递 Integer 作为传参的时候是地址传递 , 可以参考如下例子,在程序刚启动 ...

  9. ArcGIS案例学习笔记-栅格数据分区统计(平均高程,污染浓度,污染总量,降水量)

    ArcGIS案例学习笔记-栅格数据分区统计(平均高程,污染浓度,污染总量,降水量) 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:针对栅格数据,利用多边形面要 ...

  10. Pandas分类

    Pandas分类 categorical data是指分类数据:数据类型为:男女.班级(一班.二班).省份(河北.江苏等),若使用赋值法给变量赋值,例如(男=1,女=0),数字1,0之间没有大小之分, ...