实验2.1 实现基本逻辑门功能
实验设计目标
在FPGA中实现基本逻辑门并验证其功能。
实验设计思路
本实验涉及到的基本逻辑门有“与门”、“与非门”、“或门”、“或非门”、“异或门”和“同或门”,功能简单,实验时使用2个拨动开关模拟逻辑门的输入信号,通过LED灯的点亮或熄灭来验证逻辑门的功能。
功能模块图与输入输出引脚说明
逻辑门工程包含顶层模块gate与底层模块Gate_module,图2.1是整个工程的模块功能图。下面介绍一下各主要引脚的功能:
- SW_In:拨动开关输入,共有两位总线。SW_In[1]和SW_In[0]分别连接“两输入逻辑门”的输入信号。
- LED_Out:输出到LED灯,共有六位总线。LED_Out[5:0]分别连接“同或门”、“异或门”、“或非门”、“或门”、“与非门”和“与门”的输出,通过LED灯的点亮或熄灭来表示逻辑门输出的“高”和“低”电平。
图2.1 逻辑门模块功能图
程序设计
图2.2是截取自底层模块Gate_module的部分代码:
图2.2 逻辑门实验核心代码
○ 6-7:输入输出信号声明。
○ 11-16:这是本次实验的重要程序,11-16行依次实现“与门”、“与非门”、“或门”、“或非门”、“异或门”和“同或门”功能。
FPGA管脚配置
下面是Anlogic_FPGA开发板的IO Constraint,SW_In[1:0]输入信号分别与Anlogic_FPGA开发板上的SW1和SW0相连;LED_Out[5:0]输出信号分别与开发板上的LED5~LED0相连。
set_pin_assignment { SW_In[0] } { LOCATION = A10; IOSTANDARD = LVCMOS33; }
set_pin_assignment { SW_In[1] } { LOCATION = A9; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[0] } { LOCATION = B14; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[1] } { LOCATION = B15; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[2] } { LOCATION = B16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[3] } { LOCATION = C15; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[4] } { LOCATION = C16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[5] } { LOCATION = E13; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[6] } { LOCATION = E16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[7] } { LOCATION = F16; IOSTANDARD = LVCMOS33; }
逻辑门实验IO Constraint
实验结果
当逻辑门两输入分别为“1”和“0”时,“与门”、“与非门”、“或门”、“或非门”、“异或门”和“同或门”输出分别为“0、1、1、0、1、0”,即Gate_Out[0]- Gate_Out[5] 分别为“0、1、1、0、1、0”,则LED0~LED5分别为“灭、亮、亮、灭、亮、灭”。因篇幅有限,其他情况请自行验证。
实验2.2 利用门电路设计实现全加器功能
实验设计目标
- 利用门电路设计实现全加器功能。
- 通过此实验初步掌握连续赋值语句——assign语句的使用方法。
实验设计思路
在电路中,算术运算中的加减乘除运算,往往是分解转化为加法运算,因此,加法器是运算电路的核心。在做二进制的加法时,必须考虑低位向高位的进位。本实验设计实现一个全加器,输入信号包含两加数$a_i$、$b_i$,以及进位输入$c_i$,输出信号包含结果位$s_i$以及进位输出ci+1。其中,进位输入$c_i$为低一位加法运算产生的进位,进位输出ci+1将作为高一位加法运算的进位输入。表2.1给出了对应的真值表。从真值表可以写出$s_i$与ci+1的逻辑表达式:
(2.1)
(2.2)
化简为:
(2.3)
(2.4)
表2.1 全加器真值表
功能模块图与输入输出引脚说明
全加器工程包含顶层模块adder与底层模块Adder_module,图2.6是整个工程的模块功能图。下面介绍一下顶层模块各引脚的功能:
图2.6 全加器顶层原理图和模块功能图
- SW_In:拨动开关输入,共有三位。SW_In[2]、SW_In[1]和SW_In[0]分别连接“全加器”的输入信号c_in、a和b,用于模拟输入信号。
- LED_Out:输出到LED灯,共有两位。LED_Out[1]和LED_Out[0]分别连接“全加器”的输出信号c_out和s,通过LED灯的点亮或熄灭来表示全加器的运算结果。
程序设计
图2.7是截取自底层模块Adder_module的部分代码:
○ 6-10:信号输入输出端口及类型声明。
○ 12-13:这是本次实验的重要程序,用于实现全加器功能,见公式(2.3)和公式(2.4)。
图2.7 全加器实验核心代码
FPGA管脚配置
下面是Anlogic FPGA的IO Constraint,SW_In[2:0]输入信号分别与MINI_FPGA开发板上的SW2、SW1和SW0相连;LED_Out[1:0]输出信号分别与开发板上的LED1~LED0相连。
set_pin_assignment { LED_Out[0] } { LOCATION = B14; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[1] } { LOCATION = B15; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[2] } { LOCATION = B16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[3] } { LOCATION = C15; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[4] } { LOCATION = C16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[5] } { LOCATION = E13; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[6] } { LOCATION = E16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { LED_Out[7] } { LOCATION = F16; IOSTANDARD = LVCMOS33; }
set_pin_assignment { SW_In[0] } { LOCATION = A9; IOSTANDARD = LVCMOS33; }
set_pin_assignment { SW_In[1] } { LOCATION = A10; IOSTANDARD = LVCMOS33; }
set_pin_assignment { SW_In[2] } { LOCATION = B10; IOSTANDARD = LVCMOS33; }
实验结果
当SW2、SW1和SW0全部拨至“UP”位置时,此时、 、均为1,全加器运算结果为,,即LED1和LED0均点亮。其他情况请自行验证。
思考与拓展
用四个全加器级联可以构成一个四位的加法器,只需将低位全加器的进位输出连接到高位全加器的进位输入即可,请编写程序在FPGA中实现四位加法器
END
文章来源:https://www.yuque.com/yingmuketang/01/qegwwc
推荐内容
- 【安路 EG4S20 版本】基础板卡信息及使用教程:芯片和板卡简介
- 【安路 EG4S20 版本】基础板卡信息及使用教程:第一工程
- 【安路 EG4S20 版本】基础板卡信息及使用教程:使用ChipWatcher
- 【安路 EG4S20 版本】基础板卡信息及使用教程:使用Modelsim
- 【安路 EG4S20 版本】基础实验设计与实现:实验1 流水灯
更多内容请关注走进FPGA专栏