Vivado设计流程实验报告

合集下载

Vivado实验03_简单4位ALU仿真实验分析

Vivado实验03_简单4位ALU仿真实验分析

PS: 由于板卡上的开关不够用,所以这里设计4位ALU,更复杂的ALU原理和步骤都是差不多的一、程序文件源码+注释分析module ALU4(input [3:0] ina, //定义输入/输出变量input [3:0] inb,output [3:0] out,input [2:0] opcode,input clk);reg [3:0] t; //此处为临时变量,由于输出变量应为连线型,而always块内的被赋值变量必须为寄存器型变量,当遇到想本实验需要在always语句块内对输出变量赋值的情况,就可以考虑中间的临时变量来调节always @(posedge clk) begincase(opcode)3'b000:t=ina+inb;3'b001:t=ina-inb;3'b010:t=ina+1;3'b011:t=ina-1;3'b100:t=ina&&inb;3'b101:t=ina||inb;3'b110:t=~ina;3'b111:t=ina^inb;default:t=0;endcaseendassign out=t; //将中间变量的结果送至输出endmodule二、测试文件源码+注释分析module ALU4_sim();reg [3:0] ina_tb; //定义输入/输出文件类型reg [3:0] inb_tb;wire [3:0] out_tb;reg [2:0] opcode_tb;reg clk;ALU4 t1(ina_tb,inb_tb,out_tb,opcode_tb,clk); //调用程序进行测试initial beginina_tb={$random}%16; //产生0~15的随机数作为初始数据inb_tb={$random}%16;opcode_tb=0;clk=0;#100 opcode_tb=000;#100 opcode_tb=001;#100 opcode_tb=010;#100 opcode_tb=011;#100 opcode_tb=100;#100 opcode_tb=101;#100 opcode_tb=110;#100 opcode_tb=111;#100 $stop;endalways #50 clk=~clk;endmodule约束文件源码(下板操作需要)## Clock signalset_property PACKAGE_PIN E3 [get_ports clk]set_property IOSTANDARD LVCMOS33 [get_ports clk]##Switchesset_property PACKAGE_PIN J15 [get_ports {ina[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {ina[0]}]set_property PACKAGE_PIN L16 [get_ports {ina[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {ina[1]}]set_property PACKAGE_PIN M13 [get_ports {ina[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {ina[2]}]set_property PACKAGE_PIN R15 [get_ports {ina[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {ina[3]}]set_property PACKAGE_PIN R17 [get_ports {inb[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {inb[0]}] set_property PACKAGE_PIN T18 [get_ports {inb[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {inb[1]}] set_property PACKAGE_PIN U18 [get_ports {inb[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {inb[2]}] set_property PACKAGE_PIN R13 [get_ports {inb[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {inb[3]}] set_property PACKAGE_PIN U12 [get_ports {opcode[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {opcode[0]}] set_property PACKAGE_PIN U11 [get_ports {opcode[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {opcode[1]}] set_property PACKAGE_PIN V10 [get_ports {opcode[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {opcode[2]}] ## LEDsset_property PACKAGE_PIN V15 [get_ports {out[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {out[0]}]set_property PACKAGE_PIN V14 [get_ports {out[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {out[1]}]set_property PACKAGE_PIN V12 [get_ports {out[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {out[2]}]set_property PACKAGE_PIN V11 [get_ports {out[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {out[3]}]三、仿真结果如下图可以看出当opcode的值依次递增时,ina和inb依次做加,减,加1,减1,逻辑与,逻辑或,逻辑非,逻辑异或等操作,结果存放在out里。

vivado工具与verilog语言的使用实验总结

vivado工具与verilog语言的使用实验总结

vivado工具与verilog语言的使用实验总结文章标题:深入探讨vivado工具与verilog语言的使用实验总结导言:在数字电路设计与实现的过程中,vivado工具与verilog语言的使用至关重要。

通过一系列的实验,我们能够全面地了解这两者在数字电路设计中的应用,并掌握它们的使用技巧。

本文将以从简到繁、由浅入深的方式,深入探讨vivado工具与verilog语言的使用实验总结,帮助读者全面理解这一主题。

一、vivado工具的基本介绍在数字电路设计中,vivado工具是一款由Xilinx公司推出的集成化开发环境。

它拥有丰富的功能和强大的性能,能够帮助设计者完成从设计到验证的全流程。

在实验中,我们首先对vivado工具的基本操作进行了学习,包括创建工程、添加设计文件、进行综合与实现等一系列步骤。

通过实践,我们能更加熟练地运用vivado工具进行数字电路设计。

二、verilog语言的基础知识verilog语言是一种硬件描述语言,广泛应用于数字电路的设计与验证。

在实验中,我们深入学习了verilog语言的基础知识,包括模块化的设计思想、信号的赋值与传输、行为级建模和结构级建模等内容。

通过对verilog语言的学习,我们能够更好地理解数字电路的工作原理,提高设计的效率和准确性。

三、vivado工具与verilog语言的综合应用在实验的进阶阶段,我们将vivado工具与verilog语言相结合,进行了一系列的综合应用实验。

通过实际的案例学习,我们掌握了如何利用vivado工具进行综合、仿真和验证,并通过verilog语言实现各种功能模块。

这些实验不仅加深了我们对vivado工具和verilog语言的理解,同时也提高了我们的综合应用能力。

总结与回顾:通过以上的实验学习,我们对vivado工具与verilog语言的使用有了更深入的了解。

vivado工具作为一款集成化开发环境,能够为数字电路设计者提供全方位的支持;而verilog语言则作为一种硬件描述语言,能够帮助设计者更加灵活地进行数字电路设计与验证。

Vivado实验01_流水灯仿真实验及下板步骤

Vivado实验01_流水灯仿真实验及下板步骤

一、新建工程1. 打开Vivado ,界面如下:2. 点击上述界面中的Create New Project ,弹出新建工程向导,依次点击Next:3.板卡选项分别为Family: Artix-7Sub-Family: Artix-7Package: csg324Speed grade: -1Temp grade: C于是,Part选择xc7a100tcsg324-1,然后下一步点击Next Finish;二、设计文件输入1.如下图,点击输入设计程序:2.如下图,选择新建文件,依次创建4个verilog文件,文件名依次为:clock_div; ctc; s_74ls138; led_light注意:最后一个为顶层文件,文件名与项目的文件名相同,且所有名称中不能出现中文、空格和符号3.双击打开,然后输入依次设计程序:注意:每次输入一个设计程序最好保存一次,保存操作如下图然后重复步骤,将4个设计程序依次输入保存4.添加仿真文件:5.进入仿真,点击 Run Simulation Run Behavioral Simulation6.调节缩小按钮,将间隔调节为1s,方便观察实验结果,然后点击上方运行按钮进行仿真,接着点击弹出的信息条的Background将其隐藏,即可看到完整的仿真循环结果7.仿真结果如下图:三、下板操作1.仿真完成后,先关闭仿真,操作如下图:2.接着进行下一步综合,如下图操作:3.综合处成功后,要进行实现操作,如下图:4.实现成功后进行下一步,管脚约束,操作如下图:注意:此处需用到板卡手册,请使用老师群共享的文件“Nexys4-DDR_rm”,此为配适的较新版本,否则可能出现错误5.约束文件生成后,更改为I/O操作界面:6.此处不能使用默认电压值,否则会报错,更改电压值为,然后将时钟引脚接至E3,复位引脚接至C12,y0至y7输出接至V16、T15、U14、T16、V15、V14、V15、V11,引脚的连接方式有三种,所有操作如下图:7.约束完成后,关闭保存:8.在源程序文档中的约束文件中可以看到刚才操作生成的约束文件,也可以直接在约束文件中直接输入代码来完成管教的约束和更改:9.约束完成后,生成编程文件:10.此时需要连接板卡到电脑,在此之前需要对板卡进行设置:11.连接电脑,打开电源开关,等待驱动安装完成后,打开Hardware Manager Open a new hardware target 在跳出的提示框中一直点击Next,不需更改,直到Finish Program device 选择板卡xc7a100t_0 在跳出的选择框中点击ok,这时就可以观察到仿真结果中的流水灯效果,以上为识别板卡到把编程文件下载到板卡的无脑操作,具体步骤请看下图:12.观察到板卡上的实验结果正确后,实验到此结束,关闭板卡的电源开关,拔出板卡,以上。

VivadofifoIP完整例程(包括testbench)

VivadofifoIP完整例程(包括testbench)

VivadofifoIP完整例程(包括testbench)⽹上尽管有各种介绍fifo的⽂章,但⼤部分没有⼀个完整的例程来练习,这⾥给出能够完整演⽰的fifo例程和仿真分析。

⼯程⽂件虽然部分基于xilinx的官⽅例程,但官⽅例程没有testbench,这部分是⾃⼰编写的,并对不同的配置进⾏了分析,完整的⼯程⽂件见如果没有分数下载,认真看本篇,也能做出来。

实验⼀⾃编fifo主程序module Asyn_FIFO#(parameter WIDTH = 8,parameter DEPTH = 4)(input clk_wr,input clk_rd,input rst_n_rd,input rst_n_wr,input wr_en,input rd_en,input [WIDTH-1:0] data_wr,output [WIDTH-1:0] data_rd,output reg rd_empty,output reg wr_full);//definationreg [WIDTH-1 : 0] mem [0 : (1<<DEPTH)-1]; //2^DEPTH numbersreg [DEPTH : 0] wp, rp;reg [DEPTH : 0] wr1_rp, wr2_rp, rd1_wp, rd2_wp;reg [DEPTH : 0] wbin, rbin;wire [DEPTH-1 : 0] waddr, raddr;wire [DEPTH : 0] wbin_next, rbin_next; //bincodewire [DEPTH : 0] wgray_next, rgray_next; //graycodewire rd_empty_val, wr_full_val;//outputassign data_rd = mem[raddr];//inputalways@(posedge clk_wr)if(wr_en && !wr_full)mem[waddr] <= data_wr;/*----------generate waddr and raddr-------------------------*///gen raddr and read gray codealways@(posedge clk_rd or negedge rst_n_rd)if(!rst_n_rd){rbin, rp} <= 0;else{rbin, rp} <= {rbin_next, rgray_next};assign raddr = rbin[DEPTH-1 : 0];assign rbin_next = rbin + (rd_en & ~rd_empty);assign rgray_next = rbin_next ^ (rbin_next >> 1);//gen waddr and write gray codealways@(posedge clk_wr or negedge rst_n_wr)if(!rst_n_wr){wbin, wp} <= 0;elseelse{wbin, wp} <= {wbin_next, wgray_next};assign waddr = wbin[DEPTH-1 : 0];assign wbin_next = wbin + (wr_en & ~wr_full);assign wgray_next = wbin_next ^ (wbin_next >> 1);/*---------------synchro rp and wp--------------------------*///synchro rpalways@(posedge clk_wr or negedge rst_n_wr)if(!rst_n_wr){wr2_rp, wr1_rp} <= 0;else{wr2_rp, wr1_rp} <= {wr1_rp, rp}; //delay two clock//synchro wpalways@(posedge clk_rd or negedge rst_n_rd)if(!rst_n_rd){rd2_wp, rd1_wp} <= 0;else{rd2_wp, rd1_wp} <= {rd1_wp, wp};/*---------------empty and full flags--------------------------*///gen rd_emptyassign rd_empty_val = (rd2_wp == rgray_next);always@(posedge clk_rd or negedge rst_n_rd)if(!rst_n_rd)rd_empty <= 1'b1;elserd_empty <= rd_empty_val;//gen wr_full, two high bit do not equalassign wr_full_val = ({~wr2_rp[DEPTH : DEPTH-1], wr2_rp[DEPTH-2 : 0]} == wgray_next); always@(posedge clk_wr or negedge rst_n_wr)if(!rst_n_wr)wr_full <= 1'b0;elsewr_full <= wr_full_val;endmoduletb程序module Asyn_FIFO_tb;parameter WIDTH = 8;reg clk_wr;reg clk_rd;reg rst_n_rd;reg rst_n_wr;reg [WIDTH-1:0] data_wr;reg wr_en;wire wr_full;wire [WIDTH-1:0] data_rd;reg rd_en;wire rd_empty;Asyn_FIFO fifo_inst(.clk_wr(clk_wr),.rst_n_rd(rst_n_rd),.rst_n_wr(rst_n_wr),.wr_en(wr_en),.data_wr(data_wr),.clk_rd(clk_rd),.rd_en(rd_en),.data_rd(data_rd),.rd_empty(rd_empty),.wr_full(wr_full));initial beginrst_n_rd = 0;rst_n_wr = 0;clk_wr = 0;clk_rd = 0;wr_en = 0;rd_en = 0;#20rst_n_rd = 1;rst_n_wr = 1;#80wr_en = 1;rd_en = 0;#335wr_en = 0;rd_en = 1;endalways #10 clk_wr = ~clk_wr;always #20 clk_rd = ~clk_rd;/* always @(posedge clk_rd)rd_en <= ($random) % 2;always @(posedge clk_wr)wr_en <= ($random) % 2; */always @(posedge clk_wr)data_wr <= ($random) % 256; endmodule将simulate.runtime时间改为1500ns实验⼆调⽤已IP库fifo, 编写testbench, 参考xilinx下⾯的官⽅例程,但⾃⼰编写testbench.双击FIFO下⾯的选项Component Name输⼊char_fifo, Fifo Implementation选Independent Clocks Block RAM.注意这⾥选的是保持Leave Out of context per IP选择, 双击Generate button.⾄此⽣成fifo IP.下⾯制作testbench,拷贝第57⾄63⾏到testbench tb_fifo.v例化char_fifo your_instance_name (.rst(rst), // input wire rst.wr_clk(wr_clk), // input wire wr_clk.rd_clk(rd_clk), // input wire rd_clk.din(din), // input wire [7 : 0] din.wr_en(wr_en), // input wire wr_en.rd_en(rd_en), // input wire rd_en.dout(dout), // output wire [7 : 0] dout.full(full), // output wire full.empty(empty), // output wire empty.wr_rst_busy(wr_rst_busy), // output wire wr_rst_busy.rd_rst_busy(rd_rst_busy) // output wire rd_rst_busy);从图上可以看到full信号拉低需要在复位信号410ns以后,重新修改testbench`timescale 1ns/1psmodule tb_fifo1;//***************************************************************************// Parameter definitions//***************************************************************************parameter WIDTH = 8;parameter DEPTH = 16;//inputsreg rst;reg wr_clk;reg rd_clk;reg [7:0] din;reg wr_en;reg rd_en;//outputswire [7:0] dout;wire full;wire empty;wire [3:0] rd_data_count;wire [3:0] wr_data_count;// Instantiate the Unitchar_fifo your_instance_name (.rst(rst), // input wire rst.wr_clk(wr_clk), // input wire wr_clk.rd_clk(rd_clk), // input wire rd_clk.din(din), // input wire [7 : 0] din.wr_en(wr_en), // input wire wr_en.rd_en(rd_en), // input wire rd_en.dout(dout), // output wire [7 : 0] dout.full(full), // output wire full.empty(empty), // output wire empty.rd_data_count(rd_data_count), // output wire [3 : 0] rd_data_count.wr_data_count(wr_data_count) // output wire [3 : 0] wr_data_count);always #10 wr_clk = ~wr_clk;always #20 rd_clk = ~rd_clk;initial begininitial begin// Initialize Inputswr_clk = 0;rd_clk = 0;rst = 1;din = 1'b1;wr_en = 0;rd_en = 0;// Wait 100 ns for global reset to finish#100rst = 0;#500;repeat (18) beginwr_en = 1;#20;wr_en = 0;#20;din = din + 1'b1;end#290repeat (18) beginrd_en = 1;#40;rd_en = 0;#40;endendendmodule选Standard FIFO时,有效读写深度是15写得时候,din是输⼊,所以不与rd_clk时钟对齐,读的时候是时钟打得出去,所以dout与时钟rd_clk对齐。

电子系统设计实验指导书(FPGA基础篇Vivado版)

电子系统设计实验指导书(FPGA基础篇Vivado版)
电子系统设计
实验指导书(FPGA 基础篇 Vivado 版)
东南大学 电子科学 ........................................................................................................................................................... 1
安全使用规范
东南大学 电子科学与工程学院
无论何时,外部电源供电与 USB 两种供电方式只能用其中一种,避免因为电压有所差别而烧坏电路板。 采用电压高于5.5V的任何电源连接器可能造成永久性的损害。 插拔接插件前请关闭电路板总开关,否则易损坏器件。 电路板应在绝缘平台上使用,否则可能引起电路板损坏。 不同编码机制不要混接。 安装设备需防止静电。 液晶显示器件或模块结雾时,不要通电工作,防止电极化学反应,产生断线。 遇到正负极连接时需谨慎,避免接反引起开发板的损坏。 保持电路板的表面清洁。 小心轻放,避免不必要的硬件损伤。
实验目的 ....................................................................................................................................................... 17 实验内容 ....................................................................................................................................................... 17 实验要求 ....................................................................................................................................................... 17 实验步骤 ....................................................................................................................................................... 17 实验结果 ....................................................................................................................................................... 22

数字钟试验设计指导试验目的掌握基于diagram的vivado工程设计流程1.doc

数字钟试验设计指导试验目的掌握基于diagram的vivado工程设计流程1.doc

数字钟试验设计指导试验目的掌握基于diagram的vivado工程设计流程1数字钟实验设计指导一、实验目的掌握基于diagram的vivado工程设计流程,学会添加IP目录并调用其中IP二、实验原理介绍本实验实现了一个简单的数字钟,能实现计时的功能。

由于数码管只有4位,因此本数字钟只能计分和秒。

本系统的逻辑部分主要由74系列的IP构成。

三、实验步骤:1、创建新工程1)打开Vivado2014.4设计开发软件,选择Create New Project.2)在弹出的创建新工程的界面中,点击Next,开始创建新工程。

3)在Project Name界面中,将工程名称修改为Digital_Clock,并设置好工程存放路径。

同时勾选上创建工程子目录的选项。

这样,整个工程文件都将存放在创建的Digital_Clock子目录中。

点击Next。

specify sources at this time(不指定添加源文件)勾选上。

点击Next。

5)在器件板卡选型界面中,在Search栏中输入xc7a35tcpg236搜索本次实验所使用的Basys3板卡上的FPGA芯片。

并选择xc7a35tcpg236-1器件。

(器件命名规则详见xilinx官方文档)点击Next。

工程的创建。

2、添加已设计好的IPcore。

工程建立完毕,我们需要将Digital_Clock这个工程所需的IP目录文件夹复制到本工程文件夹下。

本工程需要两个IP目录:74LSXX_LIB与Interface。

74LSXX_LIB和Interface都位于B3_Lab\Lab1\Digital_Clock下。

添加完后的本工程文件夹如下图:1)在Vivado设计界面的左侧设计向导栏中,点击Project Manager目录下的Project Setting。

2)在Project Setting界面中,选择IP选项,进入IP设置界面。

点击Add Respository...添加本工程文件夹下的IP_Catalog目录:3)完成目录添加后,可以看到所需IP已经自动添加。

Vivado实验流水灯仿真实验及下板步骤

Vivado实验流水灯仿真实验及下板步骤

一、新建工程1.打开Vivado2014.2,界面如下:2.点击上述界面中的CreateNewProject,弹出新建工程向导,依次点击Next:3.板卡选项分别为Family:Artix-7Sub-Family:Artix-7Package:csg324Speedgrade:-1Tempgrade:C于是,Part选择xc7a100tcsg324-1,然后下一步点击Next✍Finish;二、设计文件输入1.如下图,点击输入设计程序:2.如下图,选择新建文件,依次创建4个verilog文件,文件名依次为:clock_div;ctc;s_74ls138;led_light注意:最后一个为顶层文件,文件名与项目的文件名相同,且所有名称中不能出现中文、空格和符号3.双击打开,然后输入依次设计程序:注意:每次输入一个设计程序最好保存一次,保存操作如下图然后重复步骤,将4个设计程序依次输入保存4.添加仿真文件:5.进入仿真,点击RunSimulation✍RunBehavioralSimulation6.调节缩小按钮,将间隔调节为1s,方便观察实验结果,然后点击上方运行按钮进行仿真,接着点击弹出的信息条的Background将其隐藏,即可看到完整的仿真循环结果7.仿真结果如下图:三、下板操作1.仿真完成后,先关闭仿真,操作如下图:2.接着进行下一步综合,如下图操作:3.综合处成功后,要进行实现操作,如下图:4.实现成功后进行下一步,管脚约束,操作如下图:注意:此处需用到板卡手册,请使用老师群共享的文件“Nexys4-DDR_rm”,此为配适的较新版本,否则可能出现错误5.约束文件生成后,更改为I/O操作界面:6.此处不能使用默认电压值,否则会报错,更改电压值为3.3V,然后将时钟引脚接至E3,复位引脚接至C12,y0至y7输出接至V16、T15、U14、T16、V15、V14、V15、V11,引脚的连接方式有三种,所有操作如下图:7.约束完成后,关闭保存:8.在源程序文档中的约束文件中可以看到刚才操作生成的约束文件,也可以直接在约束文件中直接输入代码来完成管教的约束和更改:9.约束完成后,生成编程文件:10.此时需要连接板卡到电脑,在此之前需要对板卡进行设置:11.连接电脑,打开电源开关,等待驱动安装完成后,打开HardwareManager✍Openanewhardwaretarget✍在跳出的提示框中一直点击Next,不需更改,直到Finish✍Programdevice✍选择板卡xc7a100t_0✍在跳出的选择框中点击ok,这时就可以观察到仿真结果中的流水灯效果,以上为识别板卡到把编程文件下载到板卡的无脑操作,具体步骤请看下图:12.观察到板卡上的实验结果正确后,实验到此结束,关闭板卡的电源开关,拔出板卡,以上。

电子系统设计实验指导书(FPGA基础篇Vivado版)

电子系统设计实验指导书(FPGA基础篇Vivado版)

实验四:状态机 ..................................................................................................................................................... 17 一、 二、 三、 四、 实验目的 ....................................................................................................................................................... 24 实验内容 ....................................................................................................................................................... 24 实验要求 ....................................................................................................................................................... 24 实验步骤 ....................................................................................................................................................... 24

电子系统设计实验指导书(FPGA基础篇Vivado版)

电子系统设计实验指导书(FPGA基础篇Vivado版)

东南大学 电子科学与工程学院
安全使用规范
无论何时,外部电源供电与 USB 两种供电方式只能用其中一种,避免因为电压有所差别而烧坏电路板。 采用电压高于5.5V的任何电源连接器可能造成永久性的损害。 插拔接插件前请关闭电路板总开关,否则易损坏器件。 电路板应在绝缘平台上使用,否则可能引起电路板损坏。 不同编码机制不要混接。 安装设备需防止静电。 液晶显示器件或模块结雾时,不要通电工作,防止电极化学反应,产生断线。 遇到正负极连接时需谨慎,避免接反引起开发板的损坏。 保持电路板的表面清洁。 小心轻放,避免不必要的硬件损伤。
2
东南大学 电子科学与工程学院
assign c2=a|b; assign c3=~a; assign c4=~(a&b); assign c5=~(a|b); assign c6=a^b; endmodule 寄存器传输描述方式源程序: module gate(a,b,c1,c2,c3,c4,c5,c6); input a,b; output c1,c2,c3,c4,c5,c6; reg c1,c2,c3,c4,c5,c6; always@(a or b) begin case({a,b}) 2'b00: begin c1<=0;c2<=0;c3<=1;c4<=1;c5<=1;c6<=0; end 2'b01: begin c1<=0;c2<=1;c3<=1;c4<=1;c5<=0;c6<=1; end 2'b10: begin c1<=0;c2<=1;c3<=0;c4<=1;c5<=0;c6<=1; end 2'b11: begin c1<=1;c2<=1;c3<=0;c4<=0;c5<=0;c6<=0; end default: begin c1<=0;c2<=0;c3<=0;c4<=0;c5<=0; c6<=0; end endcase end endmodule (1) 进行语法检查和综合编译。 (2) 编写 testbench,进行时序仿真。

vivado时序约束分析报告

vivado时序约束分析报告

vivado时序约束分析报告1. 引言在数字电路设计过程中,时序约束是非常重要的一项任务,它用于指定设计中各个芯片内部和芯片之间的时间关系。

时序约束的正确设置能够确保设计的稳定性和性能,并帮助设计人员避免一些潜在的电路问题。

本文将对vivado时序约束进行分析,介绍其约束设置和分析过程。

2. vivado时序约束设置vivado是Xilinx公司推出的一款综合工具,它提供了一套全面的时序约束设置工具。

在vivado中,时序约束可以通过Constraints Language (XDC) 文件进行设置。

XDC文件采用一种类似于Verilog HDL的语法,通过约束语句来定义各种时序约束。

vivado中时序约束包括时钟约束、时间关系约束和路径约束。

时钟约束通过指定时钟周期和时钟频率来确保设计的稳定性。

时间关系约束用于指定各个时序元素之间的要求时延,例如数据不能在时钟上升沿之前到达等。

路径约束则用于指定信号在特定路径上的最大时延或最小时延要求。

时序约束在XDC文件中通过属性子句进行设置。

属性子句可以分为实例属性和全局属性两种。

实例属性用于具体指定某个特定的时序约束,而全局属性则适用于整个设计。

通过灵活设置时序约束属性,设计人员可以对设计进行精确的控制。

3. vivado时序约束分析过程vivado提供了丰富的时序约束分析工具,帮助设计人员检查和优化设计的时序性能。

以下是vivado时序约束分析的基本过程:3.1 设定约束在进行时序约束分析之前,首先要设置合适的约束。

通过XDC文件中的约束语句,将时钟频率、最大时延要求等信息准确地传达给vivado。

只有正确设置了约束,才能进行后续的时序分析。

3.2 分析时序报告在vivado中,可以通过“Timing Summary”报告来查看设计的时序分析结果。

该报告会详细列出各个时序路径的时延信息,包括起始点、终止点、传播时延、最大时延等。

通过分析时序报告,设计人员可以了解设计中各个路径的时序情况,查找问题所在。

Vivado设计流程

Vivado设计流程

Vivado设计流程Vivado设计流程以⼀个简单的16位拨码开关的读和16位LED灯的输出电路为例,利⽤Verilog HDL语⾔,在Vivado中创建简单的16位拨码开关的输⼊和16位LED灯的输出电路,将设计下载的Xilinx ⼤学计划ARTIX-7平台。

⼀、新建⼯程1、打开Vivado,然后点击创建⼀个新项⽬(或者在菜单栏选择File->NewProject…),然后点next。

2、输⼊⼯程名称、选择⼯程存储路径,并勾选Create projectsubdirectory选项,为⼯程在指定存储路径下建⽴独⽴的⽂件夹。

设置完成后,点击Next。

最后,如图,整个项⽬将在D:/FPGAprojects/myproject中。

注意:⼯程名称和存储路径中不能出现中⽂和空格,建议⼯程名称以字母、数字、下划线来组成。

3、选择RTL Project⼀项,并勾选Do not specify sources at this time,勾选该选项是为了跳过在新建⼯程的过程中添加设计源⽂件。

点击Next。

4、根据使⽤的FPGA开发平台,选择对应的FPGA⽬标器件。

Nexys4开发板请选择Artix-7 XC7A100TCSG324-1的器件,即Family和Subfamily均为Artix-7,封装形式(Package)为CSG324,速度等级(Speed grade)为-1,温度等级(Temp Grade)为C)。

点击Next。

5、确认相关信息与设计所⽤的的FPGA器件信息是否⼀致,⼀致请点击Finish,不⼀致,请返回上⼀步修改。

6、得到如下的空⽩Vivado⼯程界⾯,完成空⽩⼯程新建。

⼆、设计⽂件输⼊1、点击Flow Navigator下的Project Manager->Add Sources或中间Sources中的对话框打开设计⽂件导⼊添加对话框。

2、选择第⼆项Add or Create Design Sources,⽤来添加或新建Verilog或VHDL源⽂件,点击Next。

vivado 设计流程逻辑门实验报告

vivado 设计流程逻辑门实验报告

vivado 设计流程逻辑门实验报告下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Vivado设计流程——逻辑门实验报告一、实验目的:本次实验的主要目的是通过Vivado软件,理解和掌握数字电路设计的基本流程,包括原理图输入、逻辑综合、仿真验证以及硬件实现等步骤。

vivado_实验指导书

vivado_实验指导书

FPGA Basys3开发实验指导书安全使用规范●使用扩展接口扩展电路应用前请关闭电路板总开关,避免损坏器件。

●电路板建议在绝缘平台上使用,否则可能引起电路板损坏。

●电路使用时应防止静电。

●液晶显示器件或模块结雾时,不要通电工作,防止电极化学反应,产生断线。

●电源正负极、输入/输出端口定义时需谨慎,避免应接反引起开发板的损坏。

●保持电路板的表面清洁。

●小心轻放,避免不必要的硬件损伤目录实验一:熟悉VIV ADO编译环境(一) (1)一、实验目的 (1)二、实验内容 (1)三、实验要求 (1)四、实验步骤 (1)实验二:组合逻辑电路设计 (15)一、实验目的 (15)二、实验内容 (15)三、实验要求 (15)四、实验步骤 (15)五、实验结果 (19)实验三:时序逻辑电路设计 (21)一、实验目的 (21)二、实验内容 (21)三、实验要求 (21)四、实验步骤 (21)五、实验结果 (30)实验四:状态机 (32)一、实验目的 (32)二、实验内容 (32)三、实验要求 (32)四、实验步骤 (32)五、实验结果 (37)实验五:模块化调用 (38)一、实验目的 (38)二、实验内容 (38)三、实验要求 (38)实验六:数码管显示 (41)一、实验目的 (41)二、实验内容 (41)三、实验要求 (41)四、实验背景知识 (41)五、实验方案及实现 (43)六、实验结果 (45)实验七:交通灯 (47)一、实验目的 (47)二、实验内容 (47)三、实验要求 (47)四、实验方案及实现 (47)五、实验结果 (52)实验八:秒表的设计 (54)一、实验目的 (54)二、实验内容 (54)三、实验要求 (54)四、实验方案及实现 (54)五、实验结果 (57)实验九: 蜂鸣器演奏实验 (59)一、实验目的 (59)二、实验内容 (59)三、实验要求 (59)四、实验背景知识 (59)五、实验结果 (64)实验十:字符型LCM 驱动 (65)一、实验目的 (65)二、实验内容 (65)三、实验要求 (65)五、实验程序实现 (69)六、实验结果 (74)实验十一:VGA (76)一、实验目的 (76)二、实验内容 (76)三、实验要求 (76)四、实验背景知识 (76)五、实验结果 (80)实验十二:PS/2接口控制 (81)一、实验目的 (81)二、实验内容 (81)三、实验要求 (81)四、实验背景知识 (81)五、实验方案及实现: (84)六、实验结果 (90)实验一:熟悉VIVADO编译环境(一)一、实验目的1.熟悉VIV ADO的编译环境;2.了解在VIV ADO环境下运用Verilog HDL 语言的编程开发流程,包括源程序的编写、编译、模拟仿真及程序下载。

Vivado高效设计案例分享

Vivado高效设计案例分享

Vivado高效设计案例分享------用vivado2013.4 进行zynq 嵌入式系统的设计软件平台:vivado 2013.4硬件平台:zybo 板卡计算机操作系统平台:win7 64位首先安装vivado 2013.4软件。

软件安装完成后,打开软件,构建zynq的嵌入式硬件平台。

操作流程如下:1. 打开软件,双击图标2.出现如下界面:3.点击 Create New Project,创建新的工程。

出现如下创建工程向导,点击next。

4. 创建新工程的名称,工程路径。

选择 create project subdirectory。

点击next,进入下一步。

5.创建一个RTL 工程,选择 Do not specify sources at this time。

点击next。

6. 选择parts,选择zynq芯片包括芯片的封装。

zybo 选用的是xc7z010clg400-1的芯片。

选择好芯片,点击next,进入下一步。

7.点击finish 这样一个RTL new project 工程已经建立好了。

8. RTL 工程建立完毕后,出现如下工程界面。

在这个工程里面,我们需要创建一个block design,点击create block design。

9. 输入设计名称,这里我选择默认的设计名称。

点击ok。

10. 在diagram 对话框里面选择 ADD IP。

11. 选择 zynq7 processing system 。

双击 zynq7 processing system 。

12. 点击run block automation。

并且选择rocessing_system7_0。

13. 点击ok。

14. 双击zynq 系统,进入系统设置。

15. 点击import XPS setting16. 从/Products/Detail.cfm?NavPath=2,400,1198&Prod=ZYBO网站上面可以下到 zybo_zynq——def.xml文件。

Vivado设计流程

Vivado设计流程

Vivado设计流程以一个简单的16位拨码开关的读和16位LED灯的输出电路为例,利用Verilog HDL语言,在Vivado中创建简单的16位拨码开关的输入和16位LED灯的输出电路,将设计下载的Xilinx 大学计划ARTIX-7平台。

一、新建工程1、打开Vivado,然后点击创建一个新项目(或者在菜单栏选择File->NewProject…),然后点next。

2、输入工程名称、选择工程存储路径,并勾选Create projectsubdirectory选项,为工程在指定存储路径下建立独立的文件夹。

设置完成后,点击Next。

最后,如图,整个项目将在D:/FPGAprojects/myproject中。

注意:工程名称和存储路径中不能出现中文和空格,建议工程名称以字母、数字、下划线来组成。

3、选择RTL Project一项,并勾选Do not specify sources at this time,勾选该选项是为了跳过在新建工程的过程中添加设计源文件。

点击Next。

4、根据使用的FPGA开发平台,选择对应的FPGA目标器件。

Nexys4开发板请选择Artix-7 XC7A100TCSG324-1的器件,即Family和Subfamily均为Artix-7,封装形式(Package)为CSG324,速度等级(Speed grade)为-1,温度等级(Temp Grade)为C)。

点击Next。

5、确认相关信息与设计所用的的FPGA器件信息是否一致,一致请点击Finish,不一致,请返回上一步修改。

6、得到如下的空白Vivado工程界面,完成空白工程新建。

二、设计文件输入1、点击Flow Navigator下的Project Manager->Add Sources或中间Sources中的对话框打开设计文件导入添加对话框。

2、选择第二项Add or Create Design Sources,用来添加或新建Verilog或VHDL源文件,点击Next。

Vivado实验01_流水灯仿真实验及下板步骤

Vivado实验01_流水灯仿真实验及下板步骤

一、新建工程1. 打开Vivado ,界面如下:2. 点击上述界面中的Create New Project ,弹出新建工程向导,依次点击Next:3.板卡选项分别为Family: Artix-7Sub-Family: Artix-7Package: csg324Speed grade: -1Temp grade: C于是,Part选择xc7a100tcsg324-1,然后下一步点击Next Finish;二、设计文件输入1.如下图,点击输入设计程序:2.如下图,选择新建文件,依次创建4个verilog文件,文件名依次为:clock_div; ctc; s_74ls138; led_light注意:最后一个为顶层文件,文件名与项目的文件名相同,且所有名称中不能出现中文、空格和符号3.双击打开,然后输入依次设计程序:注意:每次输入一个设计程序最好保存一次,保存操作如下图然后重复步骤,将4个设计程序依次输入保存4.添加仿真文件:5.进入仿真,点击 Run Simulation Run Behavioral Simulation6.调节缩小按钮,将间隔调节为1s,方便观察实验结果,然后点击上方运行按钮进行仿真,接着点击弹出的信息条的Background将其隐藏,即可看到完整的仿真循环结果7.仿真结果如下图:三、下板操作1.仿真完成后,先关闭仿真,操作如下图:2.接着进行下一步综合,如下图操作:3.综合处成功后,要进行实现操作,如下图:4.实现成功后进行下一步,管脚约束,操作如下图:注意:此处需用到板卡手册,请使用老师群共享的文件“Nexys4-DDR_r m”,此为配适的较新版本,否则可能出现错误5.约束文件生成后,更改为I/O操作界面:6.此处不能使用默认电压值,否则会报错,更改电压值为,然后将时钟引脚接至E3,复位引脚接至C12,y0至y7输出接至V16、T15、U14、T16、V15、V14、V15、V11,引脚的连接方式有三种,所有操作如下图:7.约束完成后,关闭保存:8.在源程序文档中的约束文件中可以看到刚才操作生成的约束文件,也可以直接在约束文件中直接输入代码来完成管教的约束和更改:9.约束完成后,生成编程文件:10.此时需要连接板卡到电脑,在此之前需要对板卡进行设置:11.连接电脑,打开电源开关,等待驱动安装完成后,打开Hardware Manager Open a new hardware target 在跳出的提示框中一直点击Next,不需更改,直到Finish Program device 选择板卡xc7a100t_0 在跳出的选择框中点击ok,这时就可以观察到仿真结果中的流水灯效果,以上为识别板卡到把编程文件下载到板卡的无脑操作,具体步骤请看下图:12.观察到板卡上的实验结果正确后,实验到此结束,关闭板卡的电源开关,拔出板卡,以上。

《计算机组成原理》实验报告——寄存器堆

《计算机组成原理》实验报告——寄存器堆

南通大学信息科学技术学院《计算机组成实验》实验报告实验寄存器堆的设计与实现一、实验目的1.熟悉Vivado软件的使用方法。

2.熟悉寄存器堆的功能。

3.掌握自顶而下的硬件模块设计方法。

4.掌握电路仿真测试方法,掌握仿真激励文件的编写,掌握仿真输出的分析方法。

二、实验任务设计一个寄存器堆,满足两路输出一路输入的功能,并完成仿真测试。

三、实验预习(1)实验电路原理及信号说明寄存器堆(REGFILE)是CPU组成的重要存储部件,也是数据通路中的重要部件,其主要功能是对数据进行存储。

在本实验中将为REGFILE构建32×32的寄存器组,即共有32个寄存器,每个寄存器的位宽都是32位。

32×32的REGFILE逻辑结构如图所示:具体设计如下:通过带有32个带使能端的D触发器实现数据的存储,5-32译码器实现地址与存储单元的连接选择,32位32选1选择器来实现输出。

(2)实验电路设计顶层文件:module REGFILE(Ra,Rb,D,Wr,We,Clk,Clrn,Qa,Qb);input [4:0]Ra,Rb,Wr;input [31:0]D;input We,Clk,Clrn;output [31:0]Qa,Qb;wire [31:0]Y;wire[31:0]Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q 10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0;DEC5T32E dec(Wr,We,Y);REG32reg32(D,Y,Clk,Clrn,Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q 13,Q12,Q11,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0);MUX32X32select1(Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11 ,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,Ra,Qa);MUX32X32select2(Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11 ,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,Rb,Qb);Endmodule5-32地址译码器:module DEC5T32E(I,En,Y);input [4:0] I;input En;output [31:0] Y;reg [31:0] Y;always@(En or I)beginif(En)begincase(I)5'b00000:Y=32'b00000000000000000000000000000001;5'b00001:Y=32'b00000000000000000000000000000010;5'b00010:Y=32'b00000000000000000000000000000100;5'b00011:Y=32'b00000000000000000000000000001000;5'b00100:Y=32'b00000000000000000000000000010000;5'b00101:Y=32'b00000000000000000000000000100000;5'b00110:Y=32'b00000000000000000000000001000000;5'b00111:Y=32'b00000000000000000000000010000000;5'b01000:Y=32'b00000000000000000000000100000000;5'b01001:Y=32'b00000000000000000000001000000000;5'b01010:Y=32'b00000000000000000000010000000000;5'b01011:Y=32'b00000000000000000000100000000000;5'b01100:Y=32'b00000000000000000001000000000000;5'b01101:Y=32'b00000000000000000010000000000000;5'b01110:Y=32'b00000000000000000100000000000000;5'b01111:Y=32'b00000000000000001000000000000000;5'b10000:Y=32'b00000000000000010000000000000000;5'b10001:Y=32'b00000000000000100000000000000000;5'b10010:Y=32'b00000000000001000000000000000000;5'b10011:Y=32'b00000000000010000000000000000000;5'b10100:Y=32'b00000000000100000000000000000000;5'b10101:Y=32'b00000000001000000000000000000000;5'b10110:Y=32'b00000000010000000000000000000000;5'b10111:Y=32'b00000000100000000000000000000000;5'b11000:Y=32'b00000001000000000000000000000000;5'b11001:Y=32'b00000010000000000000000000000000;5'b11010:Y=32'b00000100000000000000000000000000;5'b11011:Y=32'b00001000000000000000000000000000;5'b11100:Y=32'b00010000000000000000000000000000;5'b11101:Y=32'b00100000000000000000000000000000;5'b11110:Y=32'b01000000000000000000000000000000;5'b11111:Y=32'b10000000000000000000000000000000;endcaseendelseY=32'b00000000000000000000000000000000;endendmodule32位寄存器moduleREG32(D,En,Clk,Clrn,Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q1 3,Q12,Q11,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0);input[31:0]D,En;input Clk,Clrn;output[31:0]Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11 ,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0;wire[31:0]Qn31,Qn30,Qn29,Qn28,Qn27,Qn26,Qn25,Qn24,Qn23,Qn22,Qn21,Qn20,Qn19,Qn18,Qn17,Qn16,Qn15,Qn 14,Qn13,Qn12,Qn11,Qn10,Qn9,Qn8,Qn7,Qn6,Qn5,Qn4,Qn3,Qn2,Qn1,Qn0;D_FFEC32 q31(D,Clk,En[31],Clrn,Q31,Qn31);D_FFEC32 q30(D,Clk,En[30],Clrn,Q30,Qn30);D_FFEC32 q29(D,Clk,En[29],Clrn,Q29,Qn29);D_FFEC32 q28(D,Clk,En[28],Clrn,Q28,Qn28);D_FFEC32 q27(D,Clk,En[27],Clrn,Q27,Qn27);D_FFEC32 q26(D,Clk,En[26],Clrn,Q26,Qn26);D_FFEC32 q25(D,Clk,En[25],Clrn,Q25,Qn25);D_FFEC32 q24(D,Clk,En[24],Clrn,Q24,Qn24);D_FFEC32 q23(D,Clk,En[23],Clrn,Q23,Qn23);D_FFEC32 q22(D,Clk,En[22],Clrn,Q22,Qn22);D_FFEC32 q21(D,Clk,En[21],Clrn,Q21,Qn21);D_FFEC32 q20(D,Clk,En[20],Clrn,Q20,Qn20);D_FFEC32 q19(D,Clk,En[19],Clrn,Q19,Qn19);D_FFEC32 q18(D,Clk,En[18],Clrn,Q18,Qn18);D_FFEC32 q17(D,Clk,En[17],Clrn,Q17,Qn17);D_FFEC32 q16(D,Clk,En[16],Clrn,Q16,Qn16);D_FFEC32 q15(D,Clk,En[15],Clrn,Q15,Qn15);D_FFEC32 q14(D,Clk,En[14],Clrn,Q14,Qn14);D_FFEC32 q13(D,Clk,En[13],Clrn,Q13,Qn13);D_FFEC32 q12(D,Clk,En[12],Clrn,Q12,Qn12);D_FFEC32 q11(D,Clk,En[11],Clrn,Q11,Qn11);D_FFEC32 q10(D,Clk,En[10],Clrn,Q10,Qn10);D_FFEC32 q9(D,Clk,En[9],Clrn,Q9,Qn9);D_FFEC32 q8(D,Clk,En[8],Clrn,Q8,Qn8);D_FFEC32 q7(D,Clk,En[7],Clrn,Q7,Qn7);D_FFEC32 q6(D,Clk,En[6],Clrn,Q6,Qn6);D_FFEC32 q5(D,Clk,En[5],Clrn,Q5,Qn5);D_FFEC32 q4(D,Clk,En[4],Clrn,Q4,Qn4);D_FFEC32 q3(D,Clk,En[3],Clrn,Q3,Qn3);D_FFEC32 q2(D,Clk,En[2],Clrn,Q2,Qn2);D_FFEC32 q1(D,Clk,En[1],Clrn,Q1,Qn1);assign Q0=0;assign Qn0=0;endmodule32位32选1选择器moduleMUX32X32(Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q1 1,Q10,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,S,Y);input[31:0]Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q10, Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0;input [4:0]S;output [31:0]Y;function [31:0]select;input[31:0]Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q10, Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0;input [4:0]S;case(S)5'b00000:select=Q0;5'b00001:select=Q1;5'b00010:select=Q2;5'b00011:select=Q3;5'b00100:select=Q4;5'b00101:select=Q5;5'b00110:select=Q6;5'b00111:select=Q7;5'b01000:select=Q8;5'b01001:select=Q9;5'b01010:select=Q10;5'b01011:select=Q11;5'b01100:select=Q12;5'b01101:select=Q13;5'b01110:select=Q14;5'b01111:select=Q15;5'b10000:select=Q16;5'b10001:select=Q17;5'b10010:select=Q18;5'b10011:select=Q19;5'b10100:select=Q20;5'b10101:select=Q21;5'b10110:select=Q22;5'b10111:select=Q23;5'b11000:select=Q24;5'b11001:select=Q25;5'b11010:select=Q26;5'b11011:select=Q27;5'b11100:select=Q28;5'b11101:select=Q29;5'b11110:select=Q30;5'b11111:select=Q31;endcaseendfunctionassign Y =select(Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24,Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q10, Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,S);endmoduleRTL视图如下:四、实验过程、数据记录与结果分析1.仿真测试文件:module REGFILE_Sim( );// REGFILE Inputsreg [4:0] Ra = 0 ;reg [4:0] Rb = 0 ;reg [4:0] Wr = 0 ;reg [31:0] D = 0 ;reg We = 0 ;reg Clk = 0 ;reg Clrn = 0 ;// REGFILE Outputswire [31:0] Qa ;wire [31:0] Qb ;REGFILE u_REGFILE (.Ra ( Ra [4:0] ),.Rb ( Rb [4:0] ),.Wr ( Wr [4:0] ),.D ( D [31:0] ),.We ( We ),.Clk ( Clk ),.Clrn ( Clrn ),.Qa ( Qa [31:0] ),.Qb ( Qb [31:0] ));initialbeginClk=0;We=0; D=0; Ra=0; Rb=0; Wr=1; Clrn=0;#10;endalways #10 Clk=~Clk;always #20 Ra=Ra+1;always #20 Rb=Rb+1;always #20 Wr=Wr+1;always #20 D=D+1;always #20 We=~We;always #100 Clrn=1;endmodule2.仿真测试结果:3.仿真测试结果分析开始时100ns内,Clrn=0,寄存器堆初始化清零,此期间内写入操作均无效,读出数据均为零。

(完整word版)学习vivadoHLS第6章例程中文版

(完整word版)学习vivadoHLS第6章例程中文版

学习vivado第6章Lab1——设计分析概述从C,C++或者SystemC用一般的设计方法来创建的RTL实现包括以下任务:•综合设计•查看最初实现的结果•应用优化指令提高性能你可以重复上述步骤直到要求的性能已经达到。

随后,你可以重新设计,以提高资源使用率。

这个过程关键部分是对结果的分析。

教程解释了如何使用报告和用户分析视图来分析设计和决定优化的应用。

教程由一个lab练习组成:• 体现了HLS交互分析功能• 带你经历一个设计从最初的实施,通过六个步骤,并多次优化,产生最终优化设计的过程在整个教程中证明在一个项目中执行这些步骤使您可以轻松地比较不同的解决方案的能力Lab1综合和分析DCT设计,使用从设计分析的见解来进行优化,并判断该最优化的效果。

教程设计描述从xilinx 网站下载教程设计文件,在教程设计中查看信息。

教程所用的设计文件在教程目录vivado_HLS_Tutorial\Design_Analysis用在Lab练习中的设计样本是2-D DCT函数。

为了突出设计分析功能,您的目标是让这个设计在100或更小的间隔内操作。

设计应该能够在每100时钟周期内处理新设定的输入数据。

Lab1:设计优化这个练习解释了用户分析界面视角的基本操作,还有你如何用这个界面来驱动设计优化。

重要:在教程中的图片和命令假设教程数据路径vivado_HLS_Tutorial被解压放置在c:\vivado_HLS_Tutorial中。

如果教程数据目录解压缩到不同的位置,或者在Linux系统上,调整一些路径名引用到的位置您选择放置Vivado_HLS_Tutorial目录。

步骤1:创建并打开工程1.打开Vivado HLS 命令提示符a.在windows系统中,采用Start>All Programs>Xilinx Design Tools>Vivado2014.2>Vivado HLS>Vivado HLS 2014.2 Command Prompt,如下图b.在linux系统下,打开新的shell,2. 用命令提示符窗口,如图107,从lab1中将目录切换到设计分析教程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Vivado设计流程一、实验目的与实验要求1、实验目的本实验的目的是熟悉实验环境,学习如何使用Vivado 2015.4创建、综合、实现、仿真等功能。

2、实验要求(1)学习Vivado-Design-Flow.pdf、约束文件.ppt,在实验报告中回答以下问题:a) 描述Vivado 的设计流程b) 什么是网表c) 什么是约束文件?通过IO planning 完成的是什么方面的约束?d) Vivado 设计流程中,Synthesis 的作用是什么?e) Vivado 设计流程中,Implementation 的作用是什么?(2)在实验报告中提交上述实验内容的Verilog 代码、仿真结果图、RTL 详细设计图(参考Vivado-Design-Flow.pdf 第11 页Open Elaborated Design—>Schematic)、综合实现图(参考Vivado-Design-Flow.pdf 第13 页Open Synthesized Design—>Schematic)以及实验现象图(照片);(3)提交实验报告和完整的工程文件。

二、实验设备(环境)及要求(1)Xilinx Ego1实验平台。

(2)OS:Win7 64位(3)Software:Vivado15.4开发工具三、实验内容与步骤(1)实验内容a)学习视频,了解Vivado设计流程和功能:“EGO五分钟快速上手.mp4”和“EGo五分钟搭建你的数字积木.mp4”。

b)按照“Ego五分钟快速上手——流水灯.pdf”完成流水灯实验。

c)学习Vivado-Design-Flow.pdf、约束文件.ppt,回答问题。

(2)主要步骤a)在Vivado中创建RTL设计,新建一个名为vivado_design_flow的空白工程。

b)模块代码如下:module flowing_light(input clk,input rst,output [15:0] led);reg[23:0]cnt_reg;reg[15:0]light_reg;always@(posedge clk)beginif(rst)cnt_reg<=0;elsecnt_reg<=cnt_reg+1;endalways@(posedge clk)beginif(rst)light_reg<=16'h0001;else if (cnt_reg == 24'hffffff)beginif(light_reg == 16'h8000)light_reg<=16'h0001;elselight_reg<=light_reg<<1;endendassign led = light_reg;endmodulec)RTL门级结构图:图1: RTL门级结构图d)综合Run Synthesis实现图图2:综合最终设计图e)添加约束文件,按照对应管脚,综合、实现进行管脚约束:set_property PACKAGE_PIN F6 [get_ports {led[15]}]set_property PACKAGE_PIN G4 [get_ports {led[14]}]set_property PACKAGE_PIN G3 [get_ports {led[13]}]set_property PACKAGE_PIN J4 [get_ports {led[12]}]set_property PACKAGE_PIN H4 [get_ports {led[11]}]set_property PACKAGE_PIN J3 [get_ports {led[10]}]set_property PACKAGE_PIN J2 [get_ports {led[9]}]set_property PACKAGE_PIN K2 [get_ports {led[8]}]set_property PACKAGE_PIN K1 [get_ports {led[7]}]set_property PACKAGE_PIN H6 [get_ports {led[6]}]set_property PACKAGE_PIN H5 [get_ports {led[5]}]set_property PACKAGE_PIN J5 [get_ports {led[4]}]set_property PACKAGE_PIN K6 [get_ports {led[3]}]set_property PACKAGE_PIN L1 [get_ports {led[2]}]set_property PACKAGE_PIN M1 [get_ports {led[1]}]set_property PACKAGE_PIN K3 [get_ports {led[0]}]set_property PACKAGE_PIN P17 [get_ports clk]set_property PACKAGE_PIN R15 [get_ports rst]set_property IOSTANDARD LVCMOS33 [get_ports {led[15]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[14]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[13]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[12]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[11]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[10]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[9]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[8]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}] set_property IOSTANDARD LVCMOS33 [get_ports clk]set_property IOSTANDARD LVCMOS33 [get_ports rst]f)测试激励仿真代码:module test( );reg clk;reg rst;wire [3 : 0] led;flowing_light u0(.clk(clk),.rst(rst),.led(led) );parameter PERIOD = 10;always beginclk = 1'b0;#(PERIOD/2) clk = 1'b1;#(PERIOD/2);endinitial beginclk = 1'b0;rst = 1'b0;#100;rst = 1'b1;#100;rst = 1'b0;endendmodule进行行为仿真,得到并验证波形图g)添加时序约束,设置clock的最大和最小的delay timeh)最后进行综合,生成比特流文件,加载到板子上进行调试分析。

四:实验结果与分析(1)通过设计后,利用Vivado自带工具,生成RTL门级结构如下:图3:RTL门级结构(2)仿真得到波形图如下:图4:波型仿真图(3)实验板显示情况如下:图4:FPGA板测试图样图5:FPGA板测试图样五:结论(讨论)1、实验结论通过本次实验的流程和视频的观看,学会了如何使用Xilinx Vivado 2015.4创建、综合、实现、仿真等功能。

通过编写一个流水灯实验来介绍使用Xilinx Vivado 来进行基本的FPGA设计,简单易懂,并能很好的类比其他的设计。

图6 :实验流程图2、讨论在流水灯实验中,由于频率过高,导致了显示频率过快,可以增加分频代码,将频率再进一步降低,使显示更加清楚明了。

现回答报告中所提出的问题:a) 描述Vivado的设计流程:实验流程主要有以下几步:1、通过编写HDL文件的方式创建Vivado设计。

2、进行Verilog HDL语言编写3、写出测试激励,在测试激励中进行仿真4、综合、实现进行管脚约束5、生成bitstream文件,下载到FPGA开发板里b) 什么是网表:xilinx的步骤synphysize(综合)translate(注译),map(映射),和place and route(布局布线)综合以后生成的就为网表文件即一个电路的雏形,之后可以看到RTL(寄存器传输级)电路。

也可以看到technology 电路。

两者区别等你看到就很快明白。

这两张图片是对网表的一种直观的显示。

也就是综合器最后综合出了你的逻辑电路。

放在网表文件中。

c) 什么是约束文件:约束文件是用来指定选用FPGA器件的型号及定义引脚属性的文件。

其中包括管脚约束(将模块的端口和FPGA的管脚对应)、区域约束(将模块放置在FPGA 的特点位置)、时序约束(对数据建立、保持时间进行约束,保证设计在高速时钟下的工作可靠性等)。

通过IO planing完成的是管脚约束。

d) Vivado设计流程中,Synthesis的作用:即综合,作用是将所写的verilog代码通过编译器处理,生成一系列文件,向操作者报告综合的结果。

并且会自动生成门级逻辑结构网表,比源文件更加具体,可以用测试模块调用它做仿真。

e) Vivado设计流程中,Implementation的作用:即实现,作用是在Synthesis(综合)完成后,配合约束文件,实现设计。

相关文档
最新文档