实验一_Verilog+设计基础
- 格式:docx
- 大小:43.23 KB
- 文档页数:4
Verilog期末实验报告―波形发生器深圳大学实验报告课程名称: Verilog使用及其应用实验名称: 频率可变的任意波形发生器学院: 电子科学与技术学院专业:电子科学与技术班级: 2组号: 指导教师: 刘春平报告人: 陈昊学号: 2007160162 实验地点科技楼B115一、实验目的应用Verilog进行编写四种波形发生的程序,并结合DE2板与DVCC实验板上的D/A转换器在示波器显示出波形。
初步了解Verilog的编程及DE2板的应用,加强对其的实际应用操作能力。
二、实验原理实验程序分为三部分:第一、通过计数器实现内置信号分频,并通过外置开关调节频率来控制输出波形的频率。
第二、设定ROM中的数值,将波形数据存储到ROM中。
第三、设定波形选择开关。
总体设计方案及其原理说明:FPGA图 1-1 系统总体设计方案DDS是一种把数字信号通过数/模转换器转换成模拟信号的合成技术。
它由相位累加器、相幅转换函数表、D/A转换器以及内部时序控制产生器等电路组成。
参考频率f_clk为整个合成器的工作频率,输入的频率字保存在频率寄存器中,经,位相位累加器,累加一次,相位步进增加,经过内部ROM波形表得到相应的幅度值,经过D/A转换和低通滤波器得到合成的波形。
p为频率字,即相位增量;参考频率为,_clk;相位累加器的长度为,位,输出频率,_out为:f_out——输出信号的频率; N————相位累加器的位数;p———频率控制字(步长); f_clk——基准时钟频率。
图1-2 四种波形单周期的取样示意图段地址基地址 D7 D6 D5 D4 D3 D2 D1 D000 000 1000 001 1700 010 1500 011 1700 100 1000 101 300 110 500 111 301 000 301 001 301 010 301 011 301 100 101 101 101 110 101 111 110 000 010 001 510 010 1010 011 1510 100 2010 101 2510 110 3010 111 3511 000 3511 001 3011 010 2511 011 2011 100 1511 101 1011 110 511 111 0图1-3 函数查找表的设计三、实验内容程序编码:module dds(f_clk,p,choose,data);//端口设定 input [5:0] p; //频率控制字 input[1:0] choose; //波形选择 input f_clk; //内置晶振 output [7:0] data; wire [7:0]data;reg [5:0] addr,address; reg [5:0] i;reg f_out;initialbegini<=0;addr<=0;f_out<=0;endalways @(posedge f_clk) //利用计数器实现任意分频beginif(i==p) //设定频率控制字pbegini=0;f_out=~f_out;endelsei=i+1;endfunction [7:0] romout; //ROM的设定input[5:0] address; case(address) //各波形初值的预装入0 : romout = 10; //正弦波初值 1 : romout = 17;2 : romout = 15;3 : romout = 17;4 : romout = 10;5 : romout = 3;6 : romout = 5;7 : romout = 3;8 : romout = 3; //方波初值 9 : romout = 3;10: romout = 3;11: romout = 3;12: romout = 1;13: romout = 1;14: romout = 1;15: romout = 1;16 : romout = 0; //正三角波初值 17 : romout = 5;18 : romout = 10;19 : romout = 15;20 : romout = 20;21 : romout = 25;22 : romout = 30;23 : romout = 35;24 : romout = 35; //反三角波初值 25 : romout = 30;26 : romout = 25;27 : romout = 20;28 : romout = 15;29 : romout = 10;30 : romout = 5;31 : romout = 0; default : romout = 10'hxx; endcase endfunctionalways@(posedge f_out)beginif(addr==8) //波形数据切换addr=0;elseaddr=addr+1;case(choose) //波形选择开关设定0: address=addr;1: address=addr+8;2: address=addr+16;3: address=addr+24;endcaseendassign data = romout(address);//将ROM中对应数据传递输出端口data输出endmodule四、实验截图1.正弦波示意图:(choose=0时的波形数值)2.方波示意图:(choose=1时的波形数值)3.正三角波示意图:(choose=2时的波形数值)4.反三角波示意图:(choose=3时的波形数值)五、实验总结通过这次期末实验,更进一步认识了Verilog语言的使用,详细了解了整个设计制作和仿真流程,独立思考并通过一步步的调试,逐步摸索和进一步优化程序最终完成实验,锻炼了逻辑思维能力。
【连载】FPGAVerilogHDL系列实例--------4位⼆进制加减法计数器Verilog HDL 之 4位⼆进制加减法计数器⼀、原理 计数器是数字系统中⽤的较多的基本逻辑器件。
它不仅能记录输⼊时钟脉冲的个数,还可以实现分频、定时等功能。
计数器的种类很多。
按脉冲⽅式可以分为同步计数器和异步计数器;按进制可以分为⼆进制计数器和⾮⼆进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。
本实验就是设计⼀个4位⼆进制加减法计数器,该计数器可以通过⼀个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有⼀个清零输⼊,低电平有效。
还有⼀个load装载数据的信号输⼊,⽤于预置数据;还有⼀个C的输出,⽤于计数器的级联。
其功能表如表1.1所⽰; 表1.1 4位⼆进制加减法计数器功能表⼆、实现在设计⽂件中输⼊Verilog代码1/****************************** 分频模块 *************************************/23 `timescale 1 ns / 1 ps4 module qu_dou ( clk ,rst , a ,b );56 input clk ;7 wire clk ;8 input rst ;9 input a ;10 wire a ;1112 output b ;13 reg b ;1415 reg [31:0] cnt ;16 reg clkout ;17 always @ ( posedge clk or negedge rst )18 begin19if ( rst == 1'b0 )20 cnt <= 0 ;21else begin if ( a==1'b1 ) begin22if ( cnt >= 32'd3000000 )23 b <= 1 ;24else25 cnt <= cnt + 1'b1 ;2627 end28else begin b <= 1'b0 ;29 cnt <= 0 ;30 end31 end32 end333435 endmodule功能实现1 `timescale 1 ns / 1 ps23 module counter4 ( load ,clr ,c ,DOUT ,clk, up_down ,DIN ,sysclk , rst );45 input load ;6 input clk;7 wire load ;8 input clr ;9 wire clr ;10 input up_down ;11 wire up_down ;12 input [3:0] DIN ;13 wire [3:0] DIN ;14 input sysclk ;15 input rst ;1617 output c ;18 reg c ;19 output [3:0] DOUT ;20 wire [3:0] DOUT ;21 reg [3:0] data_r;2223/***************** 例化去抖模块 *************************************/24 wire clk_r ;25 qu_dou qu_dou (26 .clk (sysclk) ,27 .rst (rst) ,28 .a (clk),29 .b (clk_r));3031//********************************************************************* 323334 assign DOUT = data_r;35 always @ ( posedge clk_r or posedge clr or posedge load)36 begin37if ( clr == 1) //同步清零38 data_r <= 0;39else if ( load == 1) //同步预置40 data_r <= DIN;41else begin if ( up_down ==1)42 begin43if ( data_r == 4'b1111) begin //加计数44 data_r <= 4'b0000;45 c = 1;46 end47else begin //减计数48 data_r <= data_r +1;49 c = 0 ;50 end51 end52else53 begin54if ( data_r == 4'b0000) begin //加计数55 data_r <= 4'b1111;56 c = 1;57 end58else begin //减计数59 data_r <= data_r -1;60 c = 0 ;61 end62 end63 end64 end65 endmodule。
第1篇一、实验目的1. 熟悉可编程逻辑器件(FPGA)的基本原理和操作方法。
2. 掌握使用FPGA进行数字电路设计的流程。
3. 学会使用FPGA进行简单数字电路的设计与实现。
二、实验器材1. FPGA开发板2. 编译器软件(如Xilinx ISE、Vivado等)3. 实验指导书4. 实验数据线三、实验原理可编程逻辑器件(FPGA)是一种基于半导体工艺的可编程数字电路,具有高集成度、高速度、可重构性强等特点。
FPGA通过内部逻辑单元(如查找表、触发器等)来实现各种数字电路功能。
本实验主要涉及以下原理:1. 数字电路基本原理2. 可编程逻辑器件(FPGA)的基本结构和工作原理3. 编译器软件的使用方法四、实验步骤1. 熟悉开发板(1)认识开发板上的各个模块,如时钟模块、输入输出模块、存储器模块等。
(2)了解开发板上各个模块的功能和作用。
2. 设计数字电路(1)根据实验要求,设计所需的数字电路。
(2)使用原理图或HDL语言进行电路描述。
3. 编译与下载(1)使用编译器软件对设计的数字电路进行编译。
(2)生成比特流文件。
(3)将比特流文件下载到FPGA中。
4. 测试与验证(1)观察FPGA上各个模块的输出信号,验证电路功能是否正确。
(2)使用示波器等仪器进行波形观察,进一步验证电路功能。
五、实验内容1. 设计一个4位全加器(1)原理图设计:使用原理图编辑器设计4位全加器电路。
(2)HDL语言设计:使用HDL语言描述4位全加器电路。
(3)编译与下载:将设计的电路编译成比特流文件,下载到FPGA中。
(4)测试与验证:观察FPGA上各个模块的输出信号,验证4位全加器电路功能是否正确。
2. 设计一个8位奇偶校验器(1)原理图设计:使用原理图编辑器设计8位奇偶校验器电路。
(2)HDL语言设计:使用HDL语言描述8位奇偶校验器电路。
(3)编译与下载:将设计的电路编译成比特流文件,下载到FPGA中。
(4)测试与验证:观察FPGA上各个模块的输出信号,验证8位奇偶校验器电路功能是否正确。
《FPGA设计与应用》实验指导书熊利祥编武汉理工大学华夏学院2011年9月前言一、实验课目的数字电路与系统设计实验课是电子工程类专业教学中重要的实践环节,包括了ISE开发环境基本操作及FPGA的基本原理、基带传输系统的设计、Uart串口控制器电路的设计、PS/2接口的设计、VGA显示接口设计。
要求学生通过实验学会正确使用EDA技术,掌握FPGA器件的开发,熟练使用ISE开发环境,掌握Verilog语言的编程,掌握数字电路和系统的设计。
通过实验,使学生加深对课堂专业教学内容的理解,培养学生理论联系实际的能力,实事求是,严谨的科学作风,使学生通过实验结果,利用所学的理论去分析研究EDA技术。
培养学生使用Basys 2开发板的能力以及运用实验方法解决实际问题的能力。
二、实验要求:1.课前预习①认真阅读实验指导书,了解实验内容;②认真阅读有关实验的理论知识;③读懂程序代码。
2.实验过程①按时到达实验室;②认真听取老师对实验内容及实验要求的讲解;③认真进行实验的每一步,观察程序代码与仿真结果是否相符;④将实验过程中程序代码和仿真结果提交给老师审查;⑤做完实验后,整理实验设备,关闭实验开发板电源、电脑电源后方可离开。
3.实验报告①按要求认真填写实验报告书;②认真分析实验结果;③按时将实验报告交给老师批阅。
三、实验学生守则1.保持室内整洁,不准随地吐痰、不准乱丢杂物、不准大声喧哗、不准吸烟、不准吃东西;2.爱护公务,不得在实验桌及墙壁上书写刻画,不得擅自删除电脑里面的文件;3.安全用电,严禁触及任何带电体的裸露部分,严禁带电接线和拆线;4.任何规章或不按老师要求操作造成仪器设备损坏须论价赔偿。
目录实验一Uart通用串口接口的设计 (4)实验二PS/2接口的设计 (28)实验三VGA显示接口设计 (30)附录一 basys 2开发板资料 (36)实验一 Uart串口控制接口电路的设计一、实验目的1.掌握分频模块的设计方法。
《verilog_数字系统设计课程》(第⼆版)思考题答案绪论1.什么是信号处理电路?它通常由哪两⼤部分组成?信号处理电路是进⾏⼀些复杂的数字运算和数据处理,并且⼜有实时响应要求的电路。
它通常有⾼速数据通道接⼝和⾼速算法电路两⼤部分组成。
2.为什么要设计专⽤的信号处理电路?因为有的数字信号处理对时间的要求⾮常苛刻,以⾄于⽤⾼速的通⽤处理器也⽆法在规定的时间内完成必要的运算。
通⽤微处理器芯⽚是为⼀般⽬的⽽设计的,运算的步骤必须通过程序编译后⽣成的机器码指令加载到存储器中,然后在微处理器芯⽚控制下,按时钟的节拍,逐条取出指令分析指令和执⾏指令,直到程序的结束。
微处理器芯⽚中的内部总线和运算部件也是为通⽤⽬的⽽设计,即使是专为信号处理⽽设计的通⽤微处理器,因为它的通⽤性也不可能为某⼀特殊的算法来设计⼀系列的专⽤的运算电路⽽且其内部总线的宽度也不能随便的改变,只有通过改变程序,才能实现这个特殊的算法,因⽽其算法速度也受到限制所以要设计专⽤的信号处理电路。
3.什么是实时处理系统?实时处理系统是具有实时响应的处理系统。
4.为什么要⽤硬件描述语⾔来设计复杂的算法逻辑电路?因为现代复杂数字逻辑系统的设计都是借助于EDA⼯具完成的,⽆论电路系统的仿真和综合都需要掌握硬件描述语⾔。
5.能不能完全⽤C语⾔来代替硬件描述语⾔进⾏算法逻辑电路的设计?不能,因为基础算法的描述和验证通常⽤C语⾔来做。
如果要设计⼀个专⽤的电路来进⾏这种对速度有要求的实时数据处理,除了以上C语⾔外,还须编写硬件描述语⾔程序进⾏仿真以便从电路结构上保证算法能在规定的时间内完成,并能通过与前端和后端的设备接⼝正确⽆误地交换数据。
6.为什么在算法逻辑电路的设计中需要⽤C语⾔和硬件描述语⾔配合使⽤来提⾼设计效率?⾸先C语⾔很灵活,查错功能强,还可以通过PLI编写⾃⼰的系统任务,并直接与硬件仿真器结合使⽤。
C语⾔是⽬前世界上应⽤最为⼴泛的⼀种编程语⾔,因⽽C程序的设计环境⽐Verilog HDL更完整,此外,C语⾔有可靠地编译环境,语法完备,缺陷缺少,应⽤于许多的领域。
Lab 5 模4递增计数器王阳IS1102班U2011140661.实验目的学会用Quartus 9.1编译Verilog语言的方法和步骤;设计简单的程序,并能运行;了解触发器,并学会利用触发器制作模4递增计数器。
2.实验内容●在模4递增计数器中,由cp时钟信号控制输入;●由两个D触发器组合而得到模4递增计数器;●简单的模4计数器由cp作为开关控制输入,由Q0和Q1两个LED灯控制输出。
3.代码分析1)首先,定义module的输入输出接口;2)然后,建立程序,分为模4递增计数器主块和D触发器块;3)模4递增计数器的实现分为2个块,如下:模4递增计数器块:module mo4(Q0,Q1,cp);output Q0,Q1;input cp;d_ff f0(Q0,~Q0,cp);//调用D触发器d_ff f1(Q1,~Q1,Q0); //调用D触发器endmoduleD触发器块:module d_ff (Q,D,cp);//D触发器块output Q;input D,cp;reg Q;always @(posedge cp)Q<=D;endmodule4.实验步骤1)连接DE0板:连接DE0板的电源线和数据线或直接将数据线接到电脑主机上,打开开关。
2)创建项目:打开Quartus9.1软件,选择“File—>New Project Wizard”,在弹出的窗口中输入项目的名称和存储位置。
这里笔者将文件储存在桌面的临时文件夹中,并取名为chufaqi\mo4,如下:确定输入完成后,单击Next,出现下图:可以在File name中输入文件名,再次单击Next后,接着选择实验板的型号。
如图,实验时,一般选择Cyclone lll中的EP3C16F484C6型号即可。
继续单击Next,最后,单击Finish完成项目的创建。
3)建立Verilog HDL文件:在“File—>New”的窗口中选择建立Verilog HDL文件。
Cadence IC设计实验实验六 NC-Verilog Simulator实验实验目的:NC_verilog仿真器的使用,包括编译、运行和仿真。
预备工作:cp /eva01/cdsmgr/ training_IC_data/NCVlog_5_0.tarZ .tar -vxfZ NCVlog_5_0.tarZLab1。
运行一个简单的Verilog设计[1]、设置设计环境1.cd NCVlog_5_0/lab1-mux这个目录包含了用来描述一个多路选择器和其测试平台的verilog 模块。
以下是mux_test.v模块内功能模块的端口框图。
建议:如果有时间,你最好看一看各模块(module)的Verilog代码!2.创建cds.lib文件,vi cds.lib(回车)按小写”i”切换到编辑模式,在其中写入:Define lab1muxlib ./lab1-mux.lib有关vi的编辑命令,请参阅相关资料。
如”Esc”键切换到命令状态,在命令状态下,”x”是删除当前字符,”a”是在当前光标后写入,”:wq”是存盘退出,”:!q”是不保存退出。
存盘退出3.创建(库)文件夹(即目录):mkdir lab1-mux.lib (回车)4.类似步骤1,创建hdl.var文件,在其中写入:Define WORK lab1muxlib存盘退出5.查看verilog源文件。
mux.v是2选1多路选择器MUX2_1 的门级建模源文件,mux_test.v是mux.v的测试台,包含了输入激励信号和监控程序运行的任务语句。
[2]、编译源文件(ncvlog命令):当前目录应为。
/你的学号/NCVlog_5_0/lab1-mux。
1.ncvlog mux.v –messages ,这条指令是编译mux.v。
2.vi hdl.var打开hdl.var文件,在其中添加:Define NCVLOGOPTS –messages 存盘退出注:用NCVLOGOPTS变量定义常用的ncvlog命令行操作,从而避免每次都敲入同样的命令行。
实验一VERILOG 设计基础
一、实验目的
1、 学习VERILOG的基本语法和编程规则
2、 掌握通用寄存器等常用基本数字模块的VERILOG描述和基本设计方法
3、 理解带使能控制和异步清零的8位寄存器的设计原理
4、 掌握使用VERILOG设计和验证带使能控制和异步清零的8位寄存器的方法
5、 掌握移位寄存器的设计方法
二、 实验任务
(1) 设计一个带使能控制和异步清零的8位寄存器,实现8位输入的锁存,在时钟的上
升沿处得到一个8位的输出和一个8位的反向输出,将结果显示在发光二极管。
模块的端口描述如下:
端口名 端口方向 端口位宽 端口功能
Reset(cclr) in 1
输入清零信号,低电平时有效,此时输出Q
立即变为0
Enable(rl) in 1
输入使能信号,高电平有效
Clock in 1
输入时钟信号,正跳变(上升沿)有效
D in 8
输入数据源D,当Reset为高电平且Clock发
生正跳变时,D的值保存并传送到输出端Q
Q out 8
输出寄存器值Q,清零信号为高电平时Q的
值立即变为0
Qb out 8
输出信号Qb,其值为Q的反向
模块的物理结构如下:
Q D Clk Q D Clk D15 D14 D i D 0 …… …… 图3.49 带使能控制和异步清零的16位寄存器 Reset Clock R15 R14 R i R 0 Q D Clk Q
D Clk
Enable
模块的使用注意事项
1. 数据源D(7..0)一直加在寄存器的数据输入端;
2. 周期性的时钟信号Clock一直加在寄存器的时钟输入端
3. 使能信号Enable控制寄存器是否接受数据。当Enable = '0'时,寄存器不
接受数据,保持原来的状态不变;当Enable = '1'时,在时钟信号Clock正
跳变时,寄存器接受并保存当时D(7..0)的数据;
4. 本寄存器其它方面的功能与3.3中所描述的寄存器相同。
完成的参考电路图如下:
(2) 设计一个有左、右移位功能的8位寄存器,并仿真验证。
模块的端口描述如下:
端口名 端口方向 端口位宽 端口功能
Reset in 1
输入清零信号,低电平时有效,此时输出Q
立即变为0
Clock in 1
移位时钟信号,正跳变(上升沿)有效
Mode in 2
工作模式控制信号:01左移位,10右移位,
00或11 时不移位Q=D。
D in 8
输入数据源D,当Reset为高电平且Clock发
生正跳变时,接收D的值。
Q out 8
输出寄存器值Q,清零信号为高电平时Q的
值立即变为0
Lin in 1
输入信号,其值为左移位的移入信号。
Lout out 1
输出信号,其值为左移位的移出信号。
Rin in 1
输入信号,其值为右移位的移入信号。
IO_BUF (TRI)
IO_BUF (TRI)
IO_BUF (TRI)
IO_BUF (TRI)
IO_BUF (TRI)
IO_BUF (TRI)
IO_BUF (TRI)
IO_BUF (TRI)
DQ
PRE
ENA
CLR
dout[0]~0
dout[1]~1
dout[2]~2
dout[3]~3
dout[4]~4
dout[5]~5
dout[6]~6
dout[7]~7
w_0[0]
w_0[1]
w_0[2]
w_0[3]
w_0[4]
w_0[6]
w_1[0]
w_1[1]
w_1[2]
w_1[3]
w_1[4]
w_1[5]
w_1[6]
w_2[0]
w_2[1]
w_2[2]
w_2[3]
w_2[4]
w_2[5]
rL
clk
cclr
control
d[7..0]
dout[7..0]
w_dff[7..0]
1' h0 --
w_2[6]
w_0[5]
Rout out 1
输出信号,其值为右移位的移出信号。
三、 实验步骤
1 编写VERILOG代码
2功能仿真
进行分析与综合,排除语法上的错误
建立波形仿真文件,输入激励
生成功能仿真网表
进行功能仿真,观察输出结果
3选择器件
DE2_115开发板的使用者请选择CYCLONE IV 4CE115
4绑定管脚
5 下载验证
DE2_115开发板的下载:使用USB-Blaster进行下载
四、实验内容
通过输入数据先进行计算,并通过实验进行验证。
1)将清零信号Reset(sw17)设为0,将输入信号D(sw7~sw0)设为10101010,观察输出
信号Q(ledr7~ledr0)和Qb(ledg7~ledg0),观察并记录输出。
2)将清零信号Reset(sw17)设为1,在时钟信号处输入一个上升沿(按下key0),观察并
记录输出。
3)将输入信号D(sw7~sw0)设为01010101,观察并记录输出。
4)在时钟信号处输入一个上升沿(按下key0),观察并记录输出。
清零信号Reset 使能信号Enable 输入信号D(二进制) 时钟信号Clock 输出信号Q(二进制) 输出信号Qb
(二进制)
0 0 10101010 1
1 0 10101010 上升沿
1 1 10101010 上升沿
1 1 01010101 1
1 1 01010101 上升沿
1 0 10101010 上升沿
0 0 10101010 上升沿
五、思考题
(1)通过行为描述设计8位寄存器和通过结构描述设计8位寄存器的不同点?
(2)Enable是输入使能信号,在其有效时才能接收数据D信号,如何加入输出使能信号control?
通过修改模块实现新的功能,并进行下载验证。
(3) 移位寄存器是如何工作的,其功能是如何实现的?
(4) 如何给寄存器加入输入、输出控制功能?
(5) 利用时序仿真求出寄存器电路的输出延时,并探究工作频率的增加可能对延迟时间的影
响?
参考设计:
module lab1_Preg
#(parameter WEISHU=8)
(input rL,
input clk,
input cclr,
input control,
input [WEISHU-1:0] d,
output [WEISHU-1:0] dout
);
wire [WEISHU-1:0] w_0;
wire [WEISHU-1:0] w_1;
wire [WEISHU-1:0] w_2;
wire w_3;
reg [WEISHU-1:0] w_dff;
assign w_2=w_0|w_1;
assign dout=(control)?(w_dff):{(WEISHU-1){1'bz}};
always@(posedge clk or negedge cclr)
begin
if(!cclr)
w_dff<=0;
else
w_dff<=w_2;
end
assign w_0=d & {(WEISHU-1){rL}};
assign w_1={(WEISHU-1){w_3}} & w_dff;
assign w_3=~rL;
endmodule