《FPGA设计》实验指导书
江西省赣州市安远县第一中学的欧阳玉萍(A V女优衰ZB、骚B)、蔡松林、罗瑞锋、何昌衡全家死光光!
安全操作注意事项
1、接插下载电缆前,请务必关闭实验箱开关,避免损坏下载电缆或实验箱器件。
2、操作过程中应防止静电。
3、保持实验箱和电路板的表面清洁。
4、小心轻放,避免不必要的硬件损伤或者人身受伤。
实验箱简介
实验一简单组合逻辑设计
一、实验目的和任务
1、熟习Quartus II软件的使用;
2、掌握用原理图输入法和硬件描述语言(Verilog HDL)两种方法来设计逻
辑电路;
3、通过电路的仿真及验证,进一步了解4选1数据选择器的功能;
二、实验内容
1、用原理图输入法来设计4选1数据选择器
参照按图1-1所示来编辑完成4选1数据选择器的原理图输入,其中a、b、c、d 为数据输入端,sel[1]、sel[0]为控制输入端,q为4选1数据输出端。存盘仿真后,观察仿真波形,以验证数据选择器的功能。
图1-1 4选1数据选择器原理图
2、用Verilog HDL硬件描述语言来设计4选1数据选择器
用QuartusII中的文本编辑器,编辑输入4选1数据选择器源程序:module m41( a, b, c, d, sel, q);
input a,b,c,d;
input [1:0]sel;
output q;
reg q;
always @( sel)
case(sel)
2’b00: q=a;
2’b01: q=b;
2’b11: q=d; endcase endmodule
程序中的a 、b 、c 、d 依然为数据输入端,sel[1]、sel[0]为控制输入端,q 为4选1数据输出端。同样存盘后进行仿真,并观察仿真波形,以验证数据选择器的功能。
三、实验仪器、设备及材料
电脑、EDA 软件、实验箱、下载电缆。
四、实验原理
4选1数据选择器的原理框图及真值表如图1-2及表1-1所示,sel[1:0]可能出现四种组合情况: 00 01 10 11,它分别对应选通四个不同的数据输入a 、b 、c 、d ,从q 端输出。结合以前所学数字电路的知识,可由真值表得出利用“与非门”实现的逻辑电路,进而可用QuartusII 原理图输入方法,设计出该4选1数据选择器;如应用EDA 技术所学的Verilog HDL 硬件描述语言来描述该电路功能,即可设计出该4选1数据选择器的源程序。
图1-2 4选1数据选择器的原理框图
q Sel[1]输出
选择输入
0a 01b 00
c 11
d
1
Sel[0]表1-1 真值表
五、重点、难点
d
a b c
件描述语言(Verilog HDL)两种方法来设计该逻辑电路。
其难点是要仿真出4选1数据选择器的波形,然后通过观测仿真波形,来验证该数据选择器的功能。
六、实验步骤
(一)原理图输入法的设计步骤:
(1)进入Windows 操作系统,双击Quartus II图标,启动软件。
1、单击File \ New Project Wizard菜单,输入文件名路径与设计项目的名字
mux41,点击finish, 完成设计项目建立。
点击Assignment \ Device菜单,选择器件(本设计选用cyclone 系列的
EP1C12Q240C8)。
2、启动菜单File \ New,选择Block Diagram/Schematic File,点OK,启动原理图编辑器。画出图1-1(具体方法见后面说明)。默认存盘名为mux41,保存。(2)设计的输入
1. 在原理图空白处双击,会出现元件选择对话框,在name处输入元件名,
点OK完成元件放置。依次放置4个三输入端与门(and3)、1个四输入端或门(or4),2个非门(not)器件、及6个输入端(input)、1个输入端(output)在原理图上;
2. 添加连线到器件的管脚上
把鼠标移到元件引脚附近,则鼠标光标自动由箭头变为十字,按住鼠标右键拖动,即可画出连线,参照图1连好相应元件的输入、输出脚。
3.保存原理图
单击保存按钮。原理图文件出现在红色箭头所指的地方。
(3)编译
点击菜单栏上红色箭头所指的工具图标,完成编译。
图1-3 编译
编译没有错误可以进行仿真。点击 File \ New菜单。选择other files中的vector waveform file。画出输入波形,执行仿真命令,启动仿真并观察仿真波形,进行设计电路的功能验证。
点击开始仿真
图1-4 新建波形文件的选择对话框
(二)用Verilog HDL语言完成的设计步骤:
(1)、运行Quartus II软件,先建立一个新的项目。
;
(2)、启动File \ New菜单命令(如图1-5)
(3)、选择verilog hdl file,点击OK后,键入上面“二、实验内容”中的程序。
(4)、以默认文件名和路径保存。
(5)参照原理图输入设计进行仿真,并观察仿真波形,以验证所设计电路的功能。
七、实验报告要求
1. 对于原理图设计要求有设计过程。
2. 详细论述实验步骤。
八、实验注意事项
1. 使用原理图设计时,其文件名[mux41.gdf]要与仿真的波形文件名[mux41.vwf]相同,只是文件的后缀不同;使用Verilog HDL语言设计时,其文件名(m4_1.V)要与模块名[module m4_1( a, b, c, d, sel, q);]相同,且仿真的波形文件名[m4_1.vwf]也要相同。
2. 用原理图输入法和Verilog HDL语言两种方法所做的设计,一定要建两个不同的工程,最好放在不同的目录中,且目录名不要出现中文字符。
3.在Waveform Editor仿真时,应先在菜单选项的Edit/ Grid Size…中所弹出的对话框中将Grid Size:改为1.0us;并菜单选项的Edit/ End Time…中所弹出的对话框中将Grid Size改为100.0us,以方便观察、理解仿真得到的波形。
九、思考题
1. 如何用设计好的4选1数据选择器,来实现8选1数据选择器的设计(用原理图输入法来设计),试给出设计与仿真的结果。
2.谈谈使用原理图输入法和Verilog HDL语言设计两种方法的优劣心得。
实验二组合逻辑电路设计
一、实验目的
1、继续学习Verilog HDL基本语法;
2、巩固Quartus II环境下的Verilog HDL编程设计的基础
二、主要仪器设备
EDA实验系统1台
PC机
三、实验内容
1、设计一个四线至二线编码器,其真值表如下:
表2.1 四线至二线编码器的真值表
2、设计一个2位信号的比较器,该比较器的电路符号如图2.1所示。
图2.1 比较器电路符号
引脚说明:A、B皆为二位信号;CLK为时钟脉冲输入;RST为清除控制信号。
AGTB:当A>B时,其值为1,否则为0;
AEQB:当A=B时,其值为1,否则为0;
ALTB:当A
3、设计一个八位全加器。
四、实验报告
根据以上实验内容写出实验报告,包括程序设计,软件编译,管脚分配,硬件测试结果等内容。
实验三一般计数器的设计及ModelSim 仿真测试
一、实验目的
1、掌握一般计数器的设计方法;
2、了解ModelSim 仿真测试方法。
二、主要仪器设备
EDA实验系统1台
PC机
三、实验内容
1、设计一个8421BCD十进制计数器,并将计数结果在LED或数码管上显示。
2、利用ModelSiml工具进行仿真测试。
四、ModelSim仿真步骤
见参考资料《ModelSim操作简介》
五、实验报告
根据以上实验内容写出实验报告,包括程序设计,软件编译,仿真结果及分析,硬件测试等内容。
实验四时序逻辑电路设计
一、实验目的
理解触发器和计数器的概念,掌握时序器件的Verilog HDL语言程序设计的方法二、主要仪器设备
EDA实验系统1台
PC机
三、实验内容
设计以下内容:
1、基本的D触发器;
2、同步复位的D触发器;
3、异步复位的D触发器;
4、同步置位/复位的D触发器;
5、设计一个简单的加法或减法计数器,并用LED或数码管显示
四、实验报告
根据以上实验内容写出实验报告,包括程序设计,管脚分配,用示波器观察D触发器波型;计数器用LED或数码管显示,并提交其仿真结果及分析。
实验五有限状态机(FSM)的设计
一、实验目的
1、了解FSM的应用范围和两种类型的不同特点;
2、掌握FSM的电路结构和设计要点。
二、主要仪器设备
EDA实验系统一台
三、实验原理
FSM适合于设计数字系统的控制模块。用Verilog HDL的case/if-else等语句能很好地描述基于状态机的设计。状态机可以认为是组合逻辑和时序逻辑的特殊组合。时序逻辑部分用于存贮状态,组合电路用于状态译码和产生输出信号。状态机的下一个状态不仅与输入信号有关,还与状态寄存器当前所处的状态有关。
状态机分为Mealy和Moore两种类型,前者的输出只是当前状态的函数,也就是状态的转换与输入信号无关,后者的输出则是当前状态和当前输入的函数,即状态的转换与输入信号有关。
状态机的表示方法:状态图、状态表和流程图。
四、实验内容
检测一个5位二进制序列“10010”
五、实验报告
根据以上实验内容写出实验报告,包括程序设计,软件编译,仿真结果及分析,硬件测试等内容。
实验六基于模块多层次引用的结构化电路设计
一、实验目的
1、了解复杂电路与系统的“top-down”设计思想;
2、掌握简单多层次电路的描述方法。
二、主要仪器设备
EDA/SOPC实验系统1台
三、实验原理
1、多层次结构电路的设计
复杂数字系统可采用“top-down”的方法进行设计:首先把系统分为几个模块,每个模块在分为几个子模块,依次类推,知道易于实现为止。
这种“top-down”的方法能够把复杂的设计分为许多简单的设计来实现,同时也适合于多人进行合作开发。
多层次结构电路的描述既可以采用文本方式,也可以采用图形和文本混合设计的方式。
被调用模块的指定方式:1)文件复制方式;2)使用`include语句;3)库管理方式。
2、设计实例分析
这个实例的功能是将并行数据转化为串行数据送交外部电路编码,并将解码后得到的串行数据转化为并行数据交由CPU处理。显而易见,这实际上是两个独立的逻辑功能,分别设计为独立的模块,然后再合并为一个模块显得目的明确、层次清晰。
模块源代码
// ---------------- p_to_s.v ---------------------------------
module p_to_s(D_in,T0,data,SEND,ESC,ADD_100);
output D_in,T0; // D_in是串行输出,T0是移位时钟并给
// CPU中断,以确定何时给出下个数据。
input [7:0] data; //并行输入的数据。
input SEND,ESC,ADD_100; //SEND、ESC共同决定是否进行并到串
//的数据转化。ADD_100决定何时置数。
wire D_in,T0;
reg [7:0] DATA_Q,DATA_Q_buf;
assign T0 = ! (SEND & ESC); //形成移位时钟。.
assign D_in = DATA_Q[7]; //给出串行数据。
always @(posedge T0 or negedge ADD_100) //ADD_100下沿置数,T0上沿移位。
begin
if(!ADD_100)
DATA_Q = data;
else
begin
DATA_Q_buf = DATA_Q<<1; //DATA_Q_buf作为中介,以令综合器
DATA_Q = DATA_Q_buf; //能辨明。
end
end
在p_to_s.v中,由于移位运算虽然可综合,但是不是简单的RTL级描述,直接用DATA_Q<=DATA_Q<<1的写法在综合时会令综合器产生误解。另外,在该设计中,由于时钟T0的频率较低,所以没有象以往那样采用低电平置数,而是采用ADD_100的下降沿置数。
//--------------------- s_to_p.v ---------------------------
module s_to_p(T1, data, D_out,DSC,TAKE,ADD_101);
output T1; //给CPU中断,以确定CPU何时取转化
//得到的并行数据。
output [7:0] data;
input D_out, DSC, TAKE, ADD_101; //D_out提供输入串行数据。DSC、TAKE
//共同决定何时取数。
wire [7:0] data;
wire T1,clk2;
reg [7:0] data_latch, data_latch_buf;
assign clk2 = DSC & TAKE ; //提供移位时钟。
assign T1 = !clk2;
assign data = (!ADD_101) ? data_latch : 8'bz;
always @(posedge clk2)
begin
data_latch_buf = data_latch << 1; //data_latch_buf作缓冲
data_latch = data_latch_buf; //,以令综合器能辩明。
data_latch[0] = D_out;
end
endmodule
将上面的两个模块合并起来的sys.v的源代码:
//------------------- sys.v ---------------------------
`include "./p_to_s.v"
`include "./s_to_p.v"
module sys(D_in,T0,T1, data, D_out,SEND,ESC,DSC,TAKE,ADD_100,ADD_101);
input D_out,SEND,ESC,DSC,TAKE,ADD_100,ADD_101;
inout [7:0] data;
output D_in,T0,T1;
p_to_s
p_to_s(.D_in(D_in),.T0(T0),.data(data),.SEND(SEND),.ESC(ESC),.ADD_100(ADD_100)) ;
s_to_p
s_to_p(.T1(T1),.data(data),.D_out(D_out),.DSC(DSC),.TAKE(TAKE),.ADD_101(ADD_101 ));
endmodule
四、实验内容
完成实验原理中的所有步骤,并用ModelSim进行仿真
五、实验报告
根据以上实验内容写出实验报告,包括仿真结果及分析、硬件实现、硬件测试等内容。
实验七交通灯设计
一、实验目的
综合运用Verilog HDL语言进行时序设计
二、主要仪器设备
EDA实验系统1台
PC机
三、实验内容
编写时序控制程序,实现东西、南北向的交通灯计数并亮灯的程序。东西、南北方向红灯、绿灯亮的时间各为30秒,黄灯亮时间为3秒;
表7.1 交通灯控制器的状态转换表
四、实验报告
根据以上实验内容写出实验方案,包括程序设计,软件编译,仿真结果及分析,硬件测试等内容。
选做实验一秒表的设计
一、实验目的
1、实现FPGA对四位动态数码管的控制;
2、熟悉模块化编程的操作流程
二、主要仪器设备
EDA/SOPC实验系统1台
三、实验要求
1、秒表的最小计时单位为0.1秒;
2、设计的秒表能够实现暂停和继续计时的功能。
五、实验报告
根据以上实验内容写出实验报告,包括程序设计,软件编译,仿真结果及分析,硬件测试等内容。