下冰雹 · 2022年03月04日

【安路 EG4S20 版本】基础实验设计与实现:实验2 集成逻辑门及其基本应用

实验2.1 实现基本逻辑门功能

实验设计目标

在FPGA中实现基本逻辑门并验证其功能。

实验设计思路

本实验涉及到的基本逻辑门有“与门”、“与非门”、“或门”、“或非门”、“异或门”和“同或门”,功能简单,实验时使用2个拨动开关模拟逻辑门的输入信号,通过LED灯的点亮或熄灭来验证逻辑门的功能。

功能模块图与输入输出引脚说明

逻辑门工程包含顶层模块gate与底层模块Gate_module,图2.1是整个工程的模块功能图。下面介绍一下各主要引脚的功能:

  1. SW_In:拨动开关输入,共有两位总线。SW_In[1]和SW_In[0]分别连接“两输入逻辑门”的输入信号。
  2. LED_Out:输出到LED灯,共有六位总线。LED_Out[5:0]分别连接“同或门”、“异或门”、“或非门”、“或门”、“与非门”和“与门”的输出,通过LED灯的点亮或熄灭来表示逻辑门输出的“高”和“低”电平。
    image.png
    图2.1 逻辑门模块功能图

程序设计

图2.2是截取自底层模块Gate_module的部分代码:
image.png
图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 利用门电路设计实现全加器功能

实验设计目标

  1. 利用门电路设计实现全加器功能。
  2. 通过此实验初步掌握连续赋值语句——assign语句的使用方法。

实验设计思路

在电路中,算术运算中的加减乘除运算,往往是分解转化为加法运算,因此,加法器是运算电路的核心。在做二进制的加法时,必须考虑低位向高位的进位。本实验设计实现一个全加器,输入信号包含两加数$a_i$、$b_i$,以及进位输入$c_i$,输出信号包含结果位$s_i$以及进位输出ci+1。其中,进位输入$c_i$为低一位加法运算产生的进位,进位输出ci+1将作为高一位加法运算的进位输入。表2.1给出了对应的真值表。从真值表可以写出$s_i$与ci+1的逻辑表达式:
image.png (2.1)
image.png(2.2)
化简为:
image.png(2.3)
image.png(2.4)
表2.1 全加器真值表
image.png

功能模块图与输入输出引脚说明

全加器工程包含顶层模块adder与底层模块Adder_module,图2.6是整个工程的模块功能图。下面介绍一下顶层模块各引脚的功能:
image.png
图2.6 全加器顶层原理图和模块功能图

  1. SW_In:拨动开关输入,共有三位。SW_In[2]、SW_In[1]和SW_In[0]分别连接“全加器”的输入信号c_in、a和b,用于模拟输入信号。
  2. 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)。
image.png
图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均点亮。其他情况请自行验证。
image.png

思考与拓展

用四个全加器级联可以构成一个四位的加法器,只需将低位全加器的进位输出连接到高位全加器的进位输入即可,请编写程序在FPGA中实现四位加法器

END

文章来源:https://www.yuque.com/yingmuketang/01/qegwwc

推荐内容

更多内容请关注走进FPGA专栏
推荐阅读
关注数
1615
内容数
27
本专栏将以【安路EG4S开发板】为例,从基础板卡信息及使用教程,基础实验设计与实现及综合性实验设计与实现带大家学习FPGA。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息