前言:最近开始学习FPGA了,希望通过博客记录下每一次学习的过程,与大家共勉。
目录
一、组合逻辑电路的设计(工程学习引入)
二、3-8译码器设计、下载和功能演示(在的8段数码管显示)
2.1 Logsim设计的3-8译码器电路
2.2Verilog编程实现的3-8译码器 RTL电路
编辑
编辑
2.3完成3-8译码器的设计、下载和功能演示(利用板上的8段数码管)
编辑
三、用Verilog设计实现一个4位全加器。
3.1一位全加器设计
3.2四位全加器设计
3.3Verilog 语言实现加法器
一、组合逻辑电路的设计(工程学习引入)
1.1组合逻辑电路设计
题目 :
题目分析:我们要设计一个电热水器水位状态显示电路,利用三个水位检测元件 A、B、C 的电平信号(水面低于元件输出高电平,高于则输出低电平 ),通过与非门逻辑,实现不同水位状态对应指示灯亮灭:水面在 A、B 间(正常)绿灯 G 亮;水面在 B、C 间或 A 以上(异常)黄灯 Y 亮;水面在 C 以下(危险)红灯 R 亮 。
结合题意,梳理不同水位场景下 A、B、C 取值及对应灯的状态:
水位状态 | A | B | C | G | Y | R |
---|---|---|---|---|---|---|
正常(A、B 间) | 0 | 1 | 1 | 1 | 0 | 0 |
异常(B、C 间) | 1 | 0 | 1 | 0 | 1 | 0 |
异常(A 以上) | 0 | 0 | 0 | 0 | 1 | 0 |
危险(C 以下) | 1 | 1 | 1 | 0 | 0 | 1 |
其他无效状态(无需关注) | (略) | (略) | (略) | 0 | 0 | 0 |
5绘制逻辑电路图
-
绿灯 G 支路:
- 先用一个与非门,输入接 A(同时接两个输入脚,实现 A=A⋅A )得到 A ;
- 再将 A、B、C 输入第二个与非门(需三输入与非门,或用两个两输入与非门级联:先把 A 和 B 输入与非门,输出再和 C 输入下一个与非门 ),得到 ABC ;
- 最后用第三个与非门,输入接第二个与非门输出,输出即为 G=ABC 。
-
黄灯 Y 支路:
一个两输入与非门,一个输入接 B ,另一个输入接高电平(如电源 VCC 串电阻 ),输出 Y=B 。 -
红灯 R 支路:
两个两输入与非门级联:第一个与非门输入 A、B、C(同样可拆分,先 A 和 B 输入,输出再和 C 输入 ),输出 ABC ;第二个与非门输入接该输出,输出 R=ABC 。
将各水位状态的 A、B、C 取值代入电路:
- 正常状态(A=0,B=1,C=1 ):G 支路经与非门运算输出 1(绿灯亮 ),Y 因 B=1 输出 0(黄灯灭 ),R 因 A 或 B 为 0 输出 0(红灯灭 ),符合要求。
- 异常状态(如 A=1,B=0,C=1 或 A=0,B=0,C=0 ):Y 因 B=0 输出 1(黄灯亮 ),G 输出 0(绿灯灭 ),R 输出 0(红灯灭 ),符合要求。
- 危险状态(A=1,B=1,C=1 ):R 支路输出 1(红灯亮 ),G、Y 输出 0(绿灯、黄灯灭 ),符合要求。
通过 定义逻辑变量 → 列真值表 → 写逻辑表达式 → 转换与非门形式 → 画电路图 → 验证 ,完成了电热水器水位显示电路的与非门设计 。
二、3-8译码器设计、下载和功能演示(在的8段数码管显示)
2.1 Logsim设计的3-8译码器电路
(一)3-8译码器简介介绍:
3-8译码器是一种数字电路元件,用于将3位二进制输入信号转换为8位输出信号。这种译码器的主要功能是根据输入信号的组合,将其中一个输出线激活。每个可能的输入组合对应一个唯一的输出线,这使得3-8译码器在数字系统中的许多应用中都非常有用。
1.输入: 3-8译码器有3个输入线,每一条线都可以是逻辑0或逻辑1。
2.输出: 有8个输出线,每个输出线对应于一个可能的3位输入组合。
3. 功能:3-8译码器的主要功能是根据输入的二进制组合激活相应的输出线。只有一个输出线处于逻辑高电平状态,其余输出线处于逻辑低电平状态。
4.应用:3-8译码器在数字系统中有许多应用,其中一种主要的用途是将特定的输入模式映射到相应的输出。它常用于地址译码、显示驱动和其他需要多个输出状态的场合。
2.2Verilog编程实现的3-8译码器 RTL电路
1.verilog代码如下:
module test(data_out, data_in ) ;
input [2:0] data_in;
output [7:0] data_out;
reg [7:0] data_out;always @(data_in)begincase (data_in )3'b000: data_out=8'b11111110;3'b001: data_out=8'b11111101;3'b010: data_out=8'b11111011;3'b011: data_out=8'b11110111;3'b100: data_out=8'b11101111;3'b101: data_out=8'b11011111;3'b110: data_out=8'b10111111;3'b111: data_out=8'b01111111;default: data_out=8'bxxxxxxxx;endcaseend
endmodule
2.仿真得到RTE电路图
3.编写一个仿真测试文件,对3-8译码器进行仿真测试,输出测试波形图和Transcript结果
思考回答:
1)Verilog 综合生成的3-8译码器电路原理图与原始设计电路存在什么差异? 仿真测试生成的结果是否与真值表一致?
答:输入端与输出端,其余基本无差异。Verilog综合生成的电路图中,内部的基本门电路被封装成高层次的模块,用户只需与模块的输入和输出进行交互。
仿真测试结果与真值表一致
2.3完成3-8译码器的设计、下载和功能演示(利用板上的8段数码管)
配置引脚
DE2-115 引脚列表:【整理】DE2-115引脚列表 word版-CSDN博客
使用3个SW作为输入信号,七段数码管作为输出显示
verilogo代码:
module decoder_3to8
(input wire A , //输入信号1input wire B , //输入信号2input wire C , //输入信号3output reg [0:7] out //输出信号 out);
always@(*)case({A, B, C})3'b000 : out = 8'b0000_0011; 3'b001 : out = 8'b1001_1111;3'b010 : out = 8'b0010_0101;3'b011 : out = 8'b0000_1101; 3'b100 : out = 8'b1001_1001;3'b101 : out = 8'b0100_1001;3'b110 : out = 8'b0100_0001;3'b111 : out = 8'b0001_1111;endcaseendmodule
三、用Verilog设计实现一个4位全加器。
3.1一位全加器设计
全加器简介
全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位全加器74LS283。
1.一位全加器logsim电路图:
2.verilog语言代码:
module test(A,B,cin,sum,cout);input A,B,cin;output sum,cout;wire t1,t2,t3,t4;and U1(t1,A,B);and U2(t2,A,cin);and U3(t3,B,cin);or U4(cout,t1,t2,t3);xor U5(t4,A,B);xor U6(sum,t4,cin);
endmodule
RTL电路图:
全加器实现流程:
1.创建项目:
设置一下仿真配置(后面会用到)
新建文件:
这里我们是主要使用图中圈出的这两种文件类型:
BlockDiagram/SchematicFile:这种文件类型就是我们平时绘制原理图需要使用的文件,后缀是.bdf和.bsf
VerilogHDLFile:这种文件类型就是我们需要写verilog代码的文件类型,后缀是.v
结束文件创建。来画原理图:
与之前的逻辑门电路设计类似,此处略写。
3.2四位全加器设计
最终设计封装后 的到加法器:
3.3Verilog 语言实现加法器
半加器:
module halfadder(input wire a,input wire b,output wire cout,output wire sum
);
assign cout = a&b;
assign sum = a^b;
endmodule
全加器:
module adder(input wire a,input wire b,input wire cin,output wire cout,output wire sum
);
assign cout = (a&b)|(a&cin)|(b&cin);
assign sum = a^b^cin;
endmodule
四位全加器:
module FullAdd (cout,sum,ina,inb,cin);input [3:0] ina,inb;input cin;output [3:0] sum;output cout;assign {cout,sum} = ina + inb + cin;
endmodule
编译烧录在板子上:
把文件设置为顶层文件,保持名称一致,才能编译
编译成功。
硬件配置:接线
1.用包装盒里的USB 电缆将PC的USB端口和DE2-115开发板的USB Blaster连接器连接 起来,为了实现主机和开发板之间的通讯,必须安装USB Blaster 驱动软件
鼠标右击“USB-Blaster”选择“更新驱动程序(P)”
2.在将12V的适配器连接到DE2-115主板前,按下红色的ON/OFF开关确保电源断开。
3.按下DE2-115主板上红色的电源开关OFF /ON重新上电,将DE2-115开发板的拨码开关SW19由PROG拨到RUN,就可以烧写程序了
引脚配置:
实现效果图:
加法器
结论:
新手刚刚起步,得到锻炼比较多,需要一步一部踏实练习。多练习,熟悉整个文件创建、运行、编译等环节,提高自己的动手能力。如文章有不妥之处,还望各位海涵,
参考文献:
Quartus 入门 —— 加法器 - ppqppl - 博客园
FPGA——1位全加器的实现_fpga全加器代码-CSDN博客
[FPGA基础学习]加法器、三八译码器及DE2-115基本使用方法和数码管显示_de2-115数码管位选引脚-CSDN博客