当前位置: 首页 > news >正文

网站建设最新模板宝塔搭建本地网站

网站建设最新模板,宝塔搭建本地网站,免费动画制作网站,海北wap网站建设关键词#xff1a;testbench#xff0c;仿真#xff0c;文件读写 Verilog 代码设计完成后#xff0c;还需要进行重要的步骤#xff0c;即逻辑功能仿真。仿真激励文件称之为 testbench#xff0c;放在各设计模块的顶层#xff0c;以便对模块进行系统性的例化调用进行仿真…关键词testbench仿真文件读写 Verilog 代码设计完成后还需要进行重要的步骤即逻辑功能仿真。仿真激励文件称之为 testbench放在各设计模块的顶层以便对模块进行系统性的例化调用进行仿真。 毫不夸张的说对于稍微复杂的 Verilog 设计如果不进行仿真即便是经验丰富的老手99.9999% 以上的设计都不会正常的工作。不能说仿真比设计更加的重要但是一般来说仿真花费的时间会比设计花费的时间要多。有时候考虑到各种应用场景testbench 的编写也会比 Verilog 设计更加的复杂。所以数字电路行业会具体划分设计工程师和验证工程师。 下面对 testbench 做一个简单的学习。 testbench 结构划分 testbench 一般结构如下: 其实 testbench 最基本的结构包括信号声明、激励和模块例化。 根据设计的复杂度需要引入时钟和复位部分。当然更为复杂的设计激励部分也会更加复杂。根据自己的验证需求选择是否需要自校验和停止仿真部分。 当然复位和时钟产生部分也可以看做激励所以它们都可以在一个语句块中实现。也可以拿自校验的结果作为结束仿真的条件。 实际仿真时可以根据自己的个人习惯来编写 testbench这里只是做一份个人的总结。 testbench 仿真举例 前面的章节中已经写过很多的 testbench。其实它们的结构也都大致相同。 下面我们举一个数据拼接的简单例子对 testbench 再做一个具体的分析。 一个 2bit 数据拼接成 8bit 数据的功能模块描述如下: 实例 module data_consolidation(input clk ,input rstn ,input [1:0] din , //data ininput din_en ,output [7:0] dout ,output dout_en //data out);// data shift and counterreg [7:0] data_r ;reg [1:0] state_cnt ;always (posedge clk or negedge rstn) beginif (!rstn) beginstate_cnt b0 ;data_r b0 ;endelse if (din_en) beginstate_cnt state_cnt 1b1 ; //数据计数data_r {data_r[5:0], din} ; //数据拼接endelse beginstate_cnt b0 ;endendassign dout data_r ;// data output enreg dout_en_r ;always (posedge clk or negedge rstn) beginif (!rstn) begindout_en_r b0 ;end//计数为 3 且第 4 个数据输入时同步输出数据输出使能信号else if (state_cnt 2d3 din_en) begin dout_en_r 1b1 ;endelse begindout_en_r 1b0 ;endend//这里不直接声明dout_en为reg变量而是用相关寄存器对其进行assign赋值assign dout_en dout_en_r;endmodule对应的 testbench 描述如下增加了文件读写的语句: 实例 timescale 1ns/1ps// (1) //signals declaration module test ;reg clk;reg rstn ;reg [1:0] din ;reg din_en ;wire [7:0] dout ;wire dout_en ;// (2) //clock generatingreal CYCLE_200MHz 5 ; //always beginclk 0 ; #(CYCLE_200MHz/2) ;clk 1 ; #(CYCLE_200MHz/2) ;end// (3) //reset generatinginitial beginrstn 1b0 ;#8 rstn 1b1 ;end// (4) //motivationint fd_rd ;reg [7:0] data_in_temp ; //for self checkreg [15:0] read_temp ; //8bit ascii data, 8bit \ninitial begindin_en 1b0 ; //(4.1)din b0 ;open_file(../tb/data_in.dat, r, fd_rd); //(4.2)wait (rstn) ; //(4.3)# CYCLE_200MHz ;//read data from filewhile (! $feof(fd_rd) ) begin //(4.4)(negedge clk) ;$fread(read_temp, fd_rd);din read_temp[9:8] ;data_in_temp {data_in_temp[5:0], din} ;din_en 1b1 ;end//stop data(posedge clk) ; //(4.5)#2 din_en 1b0 ;end//open tasktask open_file;input string file_dir_name ;input string rw ;output int fd ;fd $fopen(file_dir_name, rw);if (! fd) begin$display(--- iii --- Failed to open file: %s, file_dir_name);endelse begin$display(--- iii --- %s has been opened successfully., file_dir_name);endendtask// (5) //module instantiationdata_consolidation u_data_process(.clk (clk),.rstn (rstn),.din (din),.din_en (din_en),.dout (dout),.dout_en (dout_en));// (6) //auto checkreg [7:0] err_cnt ;int fd_wr ;initial beginerr_cnt b0 ;open_file(../tb/data_out.dat, w, fd_wr);forever begin(negedge clk) ;if (dout_en) begin$fdisplay(fd_wr, %h, dout);endendendalways (posedge clk) begin#1 ;if (dout_en) beginif (data_in_temp ! dout) beginerr_cnt err_cnt 1b1 ;endendend// (7) //simulation finishalways begin#100;if ($time 10000) beginif (!err_cnt) begin$display(-------------------------------------);$display(Data process is OK!!!);$display(-------------------------------------);endelse begin$display(-------------------------------------);$display(Error occurs in data process!!!);$display(-------------------------------------);end#1 ;$finish ;endendendmodule // test仿真结果如下。由图可知数据整合功能的设计符合要求:加粗样式 testbench 具体分析 1信号声明 testbench 模块声明时一般不需要声明端口。因为激励信号一般都在 testbench 模块内部没有外部信号。 声明的变量应该能全部对应被测试模块的端口。当然变量不一定要与被测试模块端口名字一样。但是被测试模块输入端对应的变量应该声明为 reg 型如 clkrstn 等输出端对应的变量应该声明为 wire 型如 doutdout_en。 2时钟生成 生成时钟的方式有很多种例如以下两种生成方式也可以借鉴。 实例 initial clk 0 ; always #(CYCLE_200MHz/2) clk ~clk;initial beginclk 0 ;forever begin#(CYCLE_200MHz/2) clk ~clk;end end 需要注意的是利用取反方法产生时钟时一定要给 clk 寄存器赋初值。 利用参数的方法去指定时间延迟时如果延时参数为浮点数该参数不要声明为 parameter 类型。例如实例中变量 CYCLE_200MHz 的值为 2.5。如果其变量类型为 parameter最后生成的时钟周期很可能就是 4ns。当然timescale 的精度也需要提高单位和精度不能一样否则小数部分的时间延迟赋值也将不起作用。 3复位生成 复位逻辑比较简单一般赋初值为 0再经过一段小延迟后复位为 1 即可。 这里大多数的仿真都是用的低有效复位。 4激励部分 激励部分该产生怎样的输入信号是根据被测模块的需要来设计的。 本次实例中: (4.1) 对被测模块的输入信号进行一个初始化防止不确定值 X 的出现。激励数据的产生我们需要从数据文件内读入。 (4.2) 处利用一个 task 去打开一个文件只要指定文件存在就可以得到一个不为 0 的句柄信号 fp_rd。fp_rd 指定了文件数据的起始地址。 (4.3) 的操作是为了等待复位后系统有一个安全稳定的可测试状态。 (4.4) 开始循环读数据、给激励。在时钟下降沿送出数据是为了被测试模块能更好的在上升沿采样数据。 利用系统任务 $fread 通过句柄信号 fd_rd 将读取的 16bit 数据变量送入到 read_temp 缓存。 输入数据文件前几个数据截图如下。因为 $fread 只能读取 2 进制文件所以输入文件的第一行对应的 ASCII 码应该是 330a所以我们想要得到文件里的数据 3应该取变量 read_temp 的第 9 到第 8bit 位的数据。 信号 data_in_temp 是对输入数据信号的一个紧随的整合后面校验模块会以此为参考来判断仿真是否正常模块设计是否正确。 (4.5) 选择在时钟上升沿延迟 2 个周期后停止输入数据是为了被测试模块能够正常的采样到最后一个数据使能信号并对数据进行正常的整合。 当数据量相对较少时可以利用 Verilog 中的系统任务 $readmemh 来按行直接读取 16 进制数据。保持文件 data_in.dat 内数据和格式不变则该激励部分可以描述为 实例 reg [1:0] data_mem [39:0] ; reg [7:0] data_in_temp ; //for self check integer k1 ; initial begin din_en 1’b0 ; din b0 ; $readmemh(“…/tb/data_in.dat”, data_mem); wait (rstn) ; # CYCLE_200MHz ; //read data from file for(k10; k140; k1k11) begin(negedge clk) ;din data_mem[k1] ;data_in_temp {data_in_temp[5:0], din} ;din_en 1b1 ; end//stop data (posedge clk) ; #2 din_en 1b0 ;end 5模块例化 这里利用 testbench 开始声明的信号变量对被测试模块进行例化连接。 6自校验 如果设计比较简单完全可以通过输入、输出信号的波形来确定设计是否正确此部分完全可以删除。如果数据很多有时候拿肉眼观察并不能对设计的正确性进行一个有效判定。此时加入一个自校验模块会大大增加仿真的效率。 实例中我们会在数据输出使能 dout_en 有效时对输出数据 dout 与参考数据 read_temp激励部分产生做一个对比并将对比结果置于信号 err_cnt 中。最后就可以通过观察 err_cnt 信号是否为 0 来直观的对设计的正确性进行判断。 当然如实例中所示我们也可以将数据写入到对应文件中利用其他方式做对比。 7结束仿真 如果我们不加入结束仿真部分仿真就会无限制的运行下去波形太长有时候并不方便分析。Verilog 中提供了系统任务 $finish 来停止仿真。 停止仿真之前可以将自校验的结果通过系统任务 $display 在终端进行显示。 文件读写选项 用于打开文件的系统任务 $fopen 格式如下 fd $fopen(name_of_file, mode)和 C 语言类似打开方式的选项 “mode” 意义如下
http://www.hkea.cn/news/14369324/

相关文章:

  • 网站开发 托管合同怎么免费网上做公司网站
  • 餐饮网站设计做名片网站
  • 互联网建网站淮南网云小镇最新动态
  • 网站最好服务器洛阳工程建设信息网站
  • 大鹏外贸网站建设深圳公司标牌制作
  • 学网站建设难吗搭建本地环境做网站
  • 畔游网站建设wordpress广告
  • 微商城网站建设市场网站建设服务怎么样
  • 坪山附近公司做网站建设哪家效益快公共服务平台登录入口
  • 莱西网站制作培训网络营销机构
  • 网站主持人wordpress title修改
  • 网站开发管理学什么怎么给公司做免费网站
  • 网站建设与管理技术发展证券公司客户经理怎么拉客户
  • 网站怎么登陆后台asp网站作业下载
  • 爱站网为什么不能用了现在手机网站设计
  • 企业网站建设前期规划外面网站怎么做
  • 做的网站 如何在局域网内访问珠海网站建设企业
  • 网站定制型和营销型wordpress标题不居中
  • 如何建自己网站做淘宝客网络运营外包托管
  • 网站建设现在主要做些什么网页文字游戏
  • 深圳建设网站制作公司莱芜都市网下载
  • 番禺高端网站建设免费图片尺寸在线修改
  • 如果制作个人网站权威的手机网站建设
  • 购物网站销售管理成都 广告公司网站建设
  • 重庆铜梁网站建设软件外包公司值得去吗
  • 网站制作分工网站开发及建设赔偿条款
  • 网站建设与管理说课稿网站建设相关的
  • 管理网站制作做的比较好的旅游网站
  • 温岭专业自适应网站建设建筑学院app网站
  • 网站分析与优化好玩的手机网页游戏