VerilogHDL硬件描述语言实验报告.doc

上传人:jian****018 文档编号:8943336 上传时间:2020-04-02 格式:DOC 页数:18 大小:130.50KB
返回 下载 相关 举报
VerilogHDL硬件描述语言实验报告.doc_第1页
第1页 / 共18页
VerilogHDL硬件描述语言实验报告.doc_第2页
第2页 / 共18页
VerilogHDL硬件描述语言实验报告.doc_第3页
第3页 / 共18页
点击查看更多>>
资源描述
Verilog HDL实验报告学院:应用科学学院班级:电科13-2班 姓名: 学号: 实验一组合逻辑电路设计(1)实验目的(1) 熟悉FPGA设计流程;(2) 熟悉DE2开发板的基本元件使用(开关、发光二极管);(3) 学习基本组合逻辑元件的Verilog HDL设计以及实现(数据选择器);(4) 掌握连续赋值语句使用;实验内容本实验的目的是学习如何连接一个简单的外部输入、输出器件到FPGA芯片以及如何在FPGA器件上实现逻辑电路控制简单外部器件。考虑使用DE2开发板上拨动开关SW17-0(toggle Switch)作为电路的输入。使用发光二极管(Light Emitt-ing Diodes,LEDs)和7段显示数码管(7-segment Display)作为电路的输出。第1部分连续赋值语句步骤 1、新建Quartus II工程,选择Cyclone II EP2C35F672C6作为目标芯片,该芯片是DE2开发板上的FPGA芯片; 2、编写Verilog HDL代码加入到Quaruts II工程; 3、引脚分配,并编译工程该工程; 4、将编译好的电路下载到FPGA器件。扳动拨动开关观察相应的发光二极管显示,验证电路功能是否正确;代码module part1(input wire 2:0SW,output wire LEDR);wire r_g,s_g,qa,qb;and u1(r_g, SW0, SW1); and u2(s_g, SW1, SW2);nor u3(qa, r_g, qb);nor u4(qb, qa, s_g);assign LEDR = qa;endmodule第2部分简单的数据选择器步骤1 .新建Quartus II工程;2. 在工程中加入8位宽的2选1数据选择器Verilog HDL代码。使用DE2开发板上的SW17作为输入s,开关SW7-0作为输入X,SW15-8作为输入Y。连接拨动开关SW到红色的发光二极管LEDR,同时连接输出M到绿色的发光二极管LEDG7-0。3. 引脚分配,确保作为电路的输入端口的Cyclone II FPGA的引脚正确连接到拨动开关SW,作为电路输出的PPGA引脚正确与LEDR和LEDG连接;4.编译;5.将编译好的电路下载到FPGA器件。通过扳动拨动开关SW改变电路输入,同时观察LEDR和LEDG的显示是否与之匹配,测试8位宽的2选1数据选择器的功能是否正确。代码设计文件module part2(input 17:0SW,output 17:0LEDR,output 7:0LEDG);assign LEDR=SW;mux_8bit_2to1 NQ(SW17,SW15:8,SW7:0,LEDG);endmodulemodule mux_2to1(input s,input x,y,output m);assign m=(s&y)|(s&x);endmodulemodule mux_8bit_2to1(input S,input 7:0X,Y,output 7:0M);mux_2to1 m7(S,X7,Y7,M7); mux_2to1 m6(S,X6,Y6,M6); mux_2to1 m5(S,X5,Y5,M5); mux_2to1 m4(S,X4,Y4,M4); mux_2to1 m3(S,X3,Y3,M3); mux_2to1 m2(S,X2,Y2,M2); mux_2to1 m1(S,X1,Y1,M1); mux_2to1 m0(S,X0,Y0,M0); endmodule测试台文件timescale 1ns/100psmodule mux2to1_test;reg x,y;reg s;wire m;mux2to1 M(s,x,y,m);initialbeginx=1;y=0;s=0;#10 s=0;#10 s=1;#10 $stop;endendmodule波形实验二组合逻辑电路设计(2) 数码和显示实验目的(1)采用always块设计组合逻辑电路;(2)熟悉二进制-十进制译码器和BCD码加法器等组合逻辑电路。实验内容(1) 组合逻辑7段显示译码器(2)二进制-BCD转换电路(3) 组合逻辑4位全加器(4)BCD码加法电路第1部分 组合逻辑7段显示译码器步骤步骤1、 1、新建Quartus II工程,在DE2开发板实现该电路。本试验的目的是用手动方式设计7段显示译码电路。要求只能使用连续赋值语句,将输出定义为关于输入的逻辑表达式。2、 编写电路的Verilog HDL源文件,并将其包含到Quartus工程。将FPGA引脚连接到相应的拨动开关和7段显示数码管。(参考User Manual for the DE2 board)。引脚分配过程也可以参考Quartus II Introduction using Verilog Design,该文件可以在Altera公司网站大学计划网站的DE2 System CD上找到。3、 编译,并且将编译好的电路下载到FPGA中;4、 扳动拨动开关改变电路输入,观察数码管显示并分析电路功能是否正确;代码module part1(input 17:0SW,output 17:0LEDR,output 6:0HEX0,HEX1,HEX2,HEX3);assign LEDR=SW;decoder4_7 decoder4_7_01(SW0+:4,HEX0);decoder4_7 decoder4_7_02(SW4+:4,HEX1);decoder4_7 decoder4_7_03(SW8+:4,HEX2);decoder4_7 decoder4_7_04(SW12+:4,HEX3);endmodulemodule decoder4_7( input 3:0a, output 6:0HEX ); assign HEX6=a3&a2&a1|a2&a1&a0; assign HEX5=a3&a2&a0|a2&a1|a1&a0; assign HEX4=a0|a2&a1; assign HEX3=a3&a2&a1&a0| a2&a1&a0| a2&a1&a0; assign HEX2=a2&a1&a0; assign HEX1=a2&a1&a0|a2&a1&a0; assign HEX0=a2&a1&a0|a3&a2&a1&a0; endmodule第2部分 二进制-BCD转换电路步骤1、 新建QuartusII工程;2、 编译,功能仿真;验证比较器、数据选择器和电路A的功能是否正确;3、 编写电路B和7段显示译码电路的Verilog HDL代码。使用DE2开发板上开关SW3-0代表输入V,使用HEX1和HEX0显示数字d1和d0。确保引脚分配正确;4、 编译,下载编译好电路到FPGA芯片中;5、 拨动拨动开关SW3-0改变收入值V,观察输出显示以测试电路的正确性;代码/niqi 1307010213/top levelwmodule part2(input 3:0SW,output 3:0LEDR,output 6:0HEX0,HEX1);wire 2:0a;wire z;wire 3:0m;wire 6:0b,HEX;assign LEDR=SW;compartor compartor_1(SW,z);circuit_A A(SW2:0,a);mux_4bit_2to1 M(z,SW,1b0,a,m);circuit_B B(z,HEX1);decoder4_7 dec(m,HEX0);endmodule/7-segment decodermodule decoder4_7( input 3:0a, output 6:0HEX ); assign HEX6=a3&a2&a1|a2&a1&a0; assign HEX5=a3&a2&a0|a2&a1|a1&a0; assign HEX4=a0|a2&a1; assign HEX3=a3&a2&a1&a0|a2&a1&a0|a2&a1&a0; assign HEX2=a2&a1&a0; assign HEX1=a2&a1&a0|a2&a1&a0; assign HEX0=a2&a1&a0|a3&a2&a1&a0; endmodule /circuit_A module circuit_A( input 2:0v, output 2:0a );assign a=v+3o6;endmodule/circuit_Bmodule circuit_B(input b,output 6:0HEX);assign HEX=b?7b111_1001:7b111_1111;endmodule/4-bit 2-to-1 multiplexermodule mux_4bit_2to1(input s,input 3:0x1,x2,output 3:0f);assign f=s?x2:x1;endmodule/Comparatormodule compartor(input 3:0v,output z);assign z=(v4h9)?1B1:1B0;endmodule实验三 锁存器、触发器和寄存器实验目的(1) 掌握锁存器、触发器和寄存器的门级描述以及行为级描述;(2) 掌握组合逻辑电路和基本存元件描述方式不同;(3) 学习Quartus II功能仿真和时序仿真方法;(4) 学习Quartus II的RTL Viewer和Technology Viewer工具的使用;实验内容1. 门控RS触发器的设计2. D锁存器的设计3. D触发器的设计第1部分 门控RS触发器步骤1. 新建Quartus II工程,选择目标器件为Cyclone II EP2C35F672C6。2. 按照例3-1或者例3-2新建Verilog HDL文件,然后将该文件包含到工程中。注意:两个版本的Verilog HDL代码产生的电路结构是相同的。3. 编译。使用Quartus II软件的RTL Viewer工具观察两种描述方式产生的电路结构,使用Technology Viewer工具验证Quartus II软件实现的电路结构是否与图3-3(b)一致。提示:点击Tools-Netlist Viewer-RTL Viewer可以打开RTL Viewer工具;4. 新建Vector Waveform File(.vwf)文件,在vwf文件包含电路的输入和输出,在QuarutsII软件中画出电路输入R和S的波形,使用Quartus II仿真器仿真该电路。验证电路的功能和时序是否正确。提示:点击File-New,在弹出的对话框中选择Vector Waveform File新建波形文件。仿真过程参考Quartus II简明教程。代码/RS flip flopmodule part1(input clk,R,S,output Q);wire r_g,s_g,qa,qb /*synthesis keep*/;assign r_g=R&clk;assign s_g=S&clk;assign qa=(r_g&qb);assign qb=(s_g&qa);assign Q=qa;endmodule综合结果(quartus II 13.0)第2部分 D锁存器步骤1. 新建Quartus II工程。按照例3-2的代码风格设计图3-3所示的D锁存器的Verilog HDL代码。使用/*synthesis keep*/综合指令,以确保使用独立的逻辑单元实现信号R,S_g,R_g,Qa和Qb。2. 选择Cyclone II EP2C35F672C6作为目标芯片,编译该工程。使用Technology Veiwer工具观察电路结构。3. 在Quarutus II中执行功能仿真,验证电路功能是否正确,执行时序仿真验证D锁存器的时序是否正确;4. 新建Quartus II工程,在DE2开发板上实现D锁存器电路。在该工程的顶层文件中需要为D锁存器电路设计合适的输入和输出端口,在工程的顶层模块中实例D锁存器模块。使用SW0代表D锁存器的数据输入D,SW1代表D锁存器的时钟输入Clk,D锁存器的输出Q到LEDR0。5. 重新编译,下载电路到DE2开发板;6. 改变拨动开关SW的状态,观察D锁存器的输出,测试电路功能是否正确;代码module top_level(SW,LEDR0); input 1:0SW; /clk & d output LEDR0; /q gated_d_latch(LEDR0,SW0,SW1); endmodule /part2.v gated d_latch module gated_d_latch(q,d,clk); input d,clk; output q; wire r,s_g,r_g,qa,qb/*synthesis keep*/; nand(s_g,d,clk); nand(r_g,r,clk); not(r,d); nand(qa,s_g,qb); nand(qb,r_g,qa); assign q=qa; endmodule 实验四 计数器设计(一)实验目的(1) 学习计数器的基本原理以及Verilog HDL实现方法;(2) 学习查看Quartus II编译报告(查看电路的最高工作频率);(3) 时序电路时序分析的基本方法(4) 掌握参数化模块库的使用;实验内容(1) 4位同步计数器设计(2) 行为级描述电路设计(3) 使用LPM设计计数器第1部分 4位同步计数器步骤1. 使用Verilog HDL设计16位同步计数器。要求:首先设计1个T触发器,通过实例化16个T触发器实现该16位同步计数器。编译,观察该实现需要多少个基本逻辑单元(Logic Elements, LEs),电路的最高工作频率Fmax是多少?2. 功能仿真,验证电路功能是否正确。3. 使用KEY0作为clock输入,开关SW1和SW2分别作为enable和reset输入,7段显示数码管HEX3-HEX0用来显示十进制计数值。按照DE2开发板上的电路做好正确的引脚分配,重新编译。4. 下载编译好的电路到FPGA器件,扳动拨动开关改变电路输入,测试电路功能。使用Quartus II软件RTL Viewer工具观察Quartus II软件是如何综合电路的?并比较Quartus II软件综合的电路与图1的差别。按照同样的方式设计1个4位同步计数器,代码module part(input 1:0KEY,output 3:0LEDR,output 1:0LEDG,output6:0HEX0);wire 3:0q;assign LEDR=q;assign LEDG=KEY;counter_4 u1(KEY0,KEY1,1b1,q);decoder4_7 H0(q3:0,HEX0);endmodulemodule counter_4( input clk,reset,en, output 3:0q);wire 3:0qq,tt;assign q=qq;assign tt0=en;assign tt1=en&qq0;assign tt2=tt1&qq1;assign tt3=tt2&qq2;T_FF u1(clk,reset,1b1,tt0, qq0);T_FF u2(clk,reset,1b1,tt1, qq1);T_FF u3(clk,reset,1b1,tt2, qq2);T_FF u4(clk,reset,1b1,tt3, qq3);endmodulemodule decoder4_7(input 3:0a,output reg 6:0f);always *case(a)4h0:f=7hC0;4h1:f=7hF9;4h2:f=7hA4;4h3:f=7hB0;4h4:f=7h99;4h5:f=7h92;4h6:f=7h82;4h7:f=7hF8;4h8:f=7h80;4h9:f=7h90;4hA:f=7h88;4hB:f=7h83;4hC:f=7hC6;4hD:f=7hA1;4hE:f=7h86;4hF:f=7h8E;default f=7hff;endcaseendmodule module T_FF(input clk,reset,en,t,output reg q);always(posedge clk,posedge reset)if(reset)q=1b0;else if(en)q=t?q:q;endmodule实验7 有限状态机第8部分 二进制BCD码转换电路设计文件/2015/10/21module bin2bcd( input clk,reset, input start, input12:0 bin, output ready,done_tick, output3:0 bcd3,bcd2,bcd1,bcd0);/finite state declarationlocalparam IDLE=2b00, OP=2b01, DONE=2b10;/signal declarationreg1:0 state_reg,state_next;reg3:0 n_reg,n_next;/counterreg3:0 bcd0_reg,bcd0_next;reg3:0 bcd1_reg,bcd1_next;reg3:0 bcd2_reg,bcd2_next;reg3:0 bcd3_reg,bcd3_next;wire3:0 bcd3_temp,bcd2_temp,bcd1_temp,bcd0_temp;reg 12:0 p2s_reg, p2s_next;/state machine/state registeralways(posedge clk,posedge reset)if(reset)state_reg=IDLE;elsestate_reg=state_next;/next logic/always(state_reg,start,n_next)always*beginstate_next=state_reg;/在此做过改动case(state_reg)IDLE:beginif(start)state_next=OP;elsestate_next=IDLE; endOP:begin if (n_next=0) state_next = DONE;elsestate_next=OP;endDONE:state_next=IDLE;default:state_next=IDLE;endcaseend/moore output logic assign done_tick=(state_reg=DONE)?1b1:1b0;assign ready=(state_reg=IDLE)?1b1:1b0;/datapass/data registeralways(posedge clk,posedge reset)beginif(reset)beginbcd0_reg=3b0;bcd1_reg=3b0;bcd2_reg=3b0;bcd3_reg=3b0;p2s_reg = 0; n_reg = 0;end else beginbcd0_reg=bcd0_next;bcd1_reg=bcd1_next;bcd2_reg=bcd2_next;bcd3_reg=bcd3_next;p2s_reg = p2s_next; n_reg = n_next; endend/ datapass next-state logicalways*begin bcd0_next = bcd0_reg; bcd1_next = bcd1_reg; bcd2_next = bcd2_reg; bcd3_next = bcd3_reg; n_next = n_reg; p2s_next = p2s_reg;case(state_reg)IDLE:beginbcd0_next=4b0;bcd1_next=4b0;bcd2_next=4b0;bcd3_next=4b0;p2s_next=bin;n_next=4b1101;endOP:beginbcd0_next=bcd0_temp2:0,p2s_reg12;bcd1_next=bcd1_temp2:0,bcd0_temp3;bcd2_next=bcd2_temp2:0,bcd1_temp3;bcd3_next=bcd3_temp2:0,bcd2_temp3;p2s_next=p2s_reg 4) ? bcd0_reg+3 : bcd0_reg; assign bcd1_temp = (bcd1_reg 4) ? bcd1_reg+3 : bcd1_reg; assign bcd2_temp = (bcd2_reg 4) ? bcd2_reg+3 : bcd2_reg; assign bcd3_temp = (bcd3_reg 4) ? bcd3_reg+3 : bcd3_reg; / output assign bcd0 = bcd0_reg; assign bcd1 = bcd1_reg; assign bcd2 = bcd2_reg; assign bcd3 = bcd3_reg;endmodule测试台文件timescale 1ns/10psmodule test; reg clk,reset,start; reg12:0 bin; wire ready,done_tick; wire 3:0 bcd3, bcd2, bcd1, bcd0;bin2bcd U( .clk(clk),.reset(reset),.start(start),.bin(bin),.ready(ready),.done_tick(done_tick),.bcd0(bcd0),.bcd1(bcd1),.bcd2(bcd2),.bcd3(bcd3) );initialclk=0;always#5 clk=clk;initialbegin$monitor( done_tick,bcd is %dt%dt%dt%dt,bcd3, bcd2, bcd1, bcd0);bin=12d2015;reset=1;start=0;#1 reset=0;#10 start=1;#500 $display(bin is %d,bin); $display(bcd is %dt%dt%dt%dt,bcd3, bcd2, bcd1, bcd0); $stop;endendmoduleModelsim波形(功能仿真)
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!