基于XILINXFPGA数字系统设计实验三.docx
《基于XILINXFPGA数字系统设计实验三.docx》由会员分享,可在线阅读,更多相关《基于XILINXFPGA数字系统设计实验三.docx(11页珍藏版)》请在冰点文库上搜索。
![基于XILINXFPGA数字系统设计实验三.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/23f4b96b-4fc6-4a8b-9175-0381d5b0cc44/23f4b96b-4fc6-4a8b-9175-0381d5b0cc441.gif)
基于XILINXFPGA数字系统设计实验三
数字系统设计-实验三
VHDL比较器及自定义IP核
实验
一、实验内容:
本次实验完成两个内容。
1、VHDL比较器实验
2、MicroBlaze自定义IP核实验
二、实验目的:
1.学习使用assert语句
2.学习使用VHDL中的基本条件描述结构if/else
3.用行为描述方式和RTL描述方式分别对给定的模块进行描述
4.验证设计文件的正确性
三、实验步骤:
一、VHDL比较器实验
1.创建一个新的工程。
2.创建COMP的行为描述(如图所示)。
3.完成模块的结构体描述
本步骤主要完成行为描述方式的结构体,最主要的目的是进行仿真。
由VHDL的assert语句比较两个输入信号,并配以severitylevel和report结构完成比较。
用条件信号赋值语句对输出信号RESULT赋值。
实验中用到的代码如下:
COMP.VHD
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityCOMPis
Port(EN:
inSTD_LOGIC;
CLK:
inSTD_LOGIC;
EXPECTED:
inSTD_LOGIC_VECTOR(3downto0);
ALU_OUT:
inSTD_LOGIC_VECTOR(3downto0);
RESULT:
outSTD_LOGIC);
endCOMP;
architectureBehavioralofCOMPis
begin
process(CLK)
begin
ifrising_edge(CLK)then
if(EN='1')then
if(EXPECTED=ALU_OUT)then
RESULT<='1';
else
RESULT<='0';
endif;
assert(EXPECTED=ALU_OUT)
report"Warning,simulationmismatchhasoccurred"
severitywarning;
endif;
endif;
endprocess;
endBehavioral;
COMP_RTL.VHD
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityCOMP_RTLis
Port(EN:
inSTD_LOGIC;
CLK:
inSTD_LOGIC;
EXPECTED:
inSTD_LOGIC_VECTOR(3downto0);
ALU_OUT:
inSTD_LOGIC_VECTOR(3downto0);
RESULT:
outSTD_LOGIC);
endCOMP_RTL;
architectureRTLofCOMP_RTLis
begin
process(CLK)
begin
ifrising_edge(CLK)then
ifEN='1'then
ifEXPECTED=ALU_OUTthen
RESULT<='1';
else
RESULT<='0';
endif;
endif;
endif;
endprocess;
endRTL;
COMP_TB.VHD
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.all;
USEieee.numeric_std.ALL;
ENTITYCOMP_TBIS
ENDCOMP_TB;
ARCHITECTUREbehaviorOFCOMP_TBIS
--ComponentDeclarationfortheUnitUnderTest(UUT)
COMPONENTCOMP
PORT(
EN:
INstd_logic;
CLK:
INstd_logic;
EXPECTED:
INstd_logic_vector(3downto0);
ALU_OUT:
INstd_logic_vector(3downto0);
RESULT:
OUTstd_logic
);
ENDCOMPONENT;
--Inputs
signalEN:
std_logic:
='1';
signalCLK:
std_logic:
='0';
signalEXPECTED:
std_logic_vector(3downto0):
=(others=>'0');
signalALU_OUT:
std_logic_vector(3downto0):
=(others=>'0');
--Outputs
signalRESULT:
std_logic;
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
COMPPORTMAP(
EN=>EN,
CLK=>CLK,
EXPECTED=>EXPECTED,
ALU_OUT=>ALU_OUT,
RESULT=>RESULT
);
CLK<=notCLKafter20ns;
TB:
process
begin
EXPECTED<=X"A";
ALU_OUT<=X"A";
waitfor200ns;
ALU_OUT<=X"B";
wait;
endprocess;
END;
4.语法检查
在Sources窗口中选中COMP.VHD,在Processes窗口中展开Synthesize,并双击CheckSyntax
完成以上步骤并且没有语法错误的情况下继续下面的步骤:
1.创建COMP的RTL描述
(1)选择菜单栏中的Project→NewSource
(2)选择左侧VHDLModule右侧fileName栏中填入文件名COMP_RTL。
(3)在DefineModule窗口中,将模块的结构体名称改为RTL,并按照行为描述方式中相同的方法填写模块的端口定义。
(4)在COMP_RTL的结构体中使用if/else语句描述COMP_RTL的功能。
2.创建此时平台文件
创建一个测试平台文件,并验证COMP模块的功能是否正确。
二、MicroBlaze自定义IP核实验
一、实验目的:
1.创建一个自定义的外围设备并将其添加到IP目录(IPCatalog)下
2.将该自定义设备添加到你的设计中
3.添加引脚约束
4.生成比特流并下载至开发板,检验运行结果
二、实验内容:
本实验将通过CreateandImportPeripheralWizard创建一个自
定义的外围设备,并将它增加到处理器系统中。
三、实验过程:
本实验将会扩展实验二中的硬件设计,创建一个plb外围设备,并将其关联到spartan-3E板上的LCD显示屏。
四、实验步骤
1.继续实验二的内容,创建一个lab3文件夹,将lab2中的内容复制到新文件夹中。
2.打开PlatformStudio,选择Hardware→CreateorImportPeripheral
使用向导完成设置。
在lab3目录下,打开pcores\lcd_ip_v1_00_a\data\lcd_ip_v2_1_0.mpd文件
在SPLB_Clk端口前添加以下代码:
PORTlcd=“”,DIR=O,VEC=[0:
6]
使用向导生成的的HDL模板文件(lcd_ip.vhd和user_logic.vhd)创建LCD控制器。
你可以使用标准的文本编辑器来修改它们。
在pcores\lcd_ip_v1_00_a\hdl\vhdl目录下打开lcd_ip.vhd文件,添加一个宽度为7比特的lcd端口
查找文本”--USER”,定位到390行左右,增加端口映射语句。
保存并关闭文件。
在vhdl目录下,打开user_logic.vhd文件,在USERPorts区域添加lcd端口定义
查找文本”--USER”,定位到132行,添加内部信号声明。
•查找文本--USERlogicimplementation,定位到146行,添加以下代码:
保存并关闭文件
选择Project→RescanUserRepositories使之前的改动生效。
使用SystemAssembyView添加lcd_ip实例到PLB总线上。
双击LCD_IP核,将其添加到SystemAssembyView当中
在lcd_ip_0的BusConnection中,选择mb_plb,将其连接到plb总线上
在ports选项卡中,展开lcd_ip_0,选择MakeExternal将lcd端口作为外部端口。
点击Addresses选项卡,锁定除lcd_ip_0之外的所有地址
将lcd_ip_0的地址大小设为64K,点击GenerateAddresses
修改system.ucf文件,将lcd控制器绑定到FPGA相应的引脚上。
打开system.ucf文件,添加以下代码
编译程序
下载比特流
连接并启动Spartan3E板。
启动一个超级终端。
选择Device→ConfigurationDownloadBitstream,下载比特流至FPGA