verilog task1
问题描述:
设计中需要重复多次施加一种激励,每一次激励的施加过程,都可以划分为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的更多相关文章
- 简单的Verilog测试模板结构
这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...
- verilog语法实例学习(6)
函数和任务 函数 https://wenku.baidu.com/view/d31d1ba8dd3383c4bb4cd283.html verilog中函数的目的是允许代码写成模块的方式而不是定义独立 ...
- Verilog学习笔记简单功能实现(二)...............全加器
先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有: Xi Yi Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...
- Verilog HDL模型的不同抽象级别
所谓不同的抽象类别,实际上是指同一个物理电路,可以在不同层次上用Verilog语言来描述.如果只从行为功能的角度来描述某一电路模块,就称作行为模块.如果从电路结构的角度来描述该电路模块,就称作结构模块 ...
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- FPGA作为从机与STM32进行SPI协议通信---Verilog实现 [转]
一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...
- 基于Verilog HDL整数乘法器设计与仿真验证
基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
随机推荐
- C#USB设备枚举Kernel32的PInvoke
using System; using System.Runtime.InteropServices; using System.Security; namespace Splash { #regio ...
- MVC基于角色权限控制--用户管理
用户管理模块包括 新增用户.修改用户.展示用户列表.删除用户.用户角色分配.用户角色删除.用户权限分配 这里只介绍关于权限有关的 用户角色分配.用户角色删除.用户权限分配 新建控制器 UserInfo ...
- 【转】簡單講講 USB Human Interface Device
原地址http://213style.blogspot.com/2013/09/usb-human-interface-device.html 恩,發本文的原因是看到了以前畢業的朋友在旁邊的對話框問了 ...
- easyui datagrid取消点击行的选中事件
http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=material&dir=ltr&pitem= ...
- TP框架(接口文档模板框架)
https://blog.csdn.net/s390124971/article/details/51995497
- 分布式存储Seaweedfs源码分析
基于源码版本号 0.67 , [Seaweedfs以前旧版叫Weedfs]. Seaweedfs 是一个非常优秀的由 golang 开发的分布式存储开源项目, 虽然在我刚开始关注的时候它在 githu ...
- Linux性能测试分析命令_sar
sar主要用于收集并统计系统资源的信息,包括CPU.IO.内存.网卡流量等. sar语法 用法:sar [ 选项 ] [ <时间间隔> [ <次数> ] ] 常用选项说明: - ...
- postmessage/cors跨域postMessage、xhr2和xmldomain
一.h5 postMessage node http-server配置服务器 有关配置:请参考我的http://www.cnblogs.com/leee/p/5502727.html 我把文件夹a配置 ...
- 利用monkey测试android,入门级用户可能遇见的错误及解决办法 【转】
转自[http://blog.csdn.net/zm2714/article/details/7977930] 一.D:\android\android-sdk-windows\tools目录中没有a ...
- io输出流变为输入流
java 输出流转化为输入流 new ByteArrayInputStream(byteArrayOutputStream.toByteArray());