使用verilog编写三八译码器及四位全加器

这篇具有很好参考价值的文章主要介绍了使用verilog编写三八译码器及四位全加器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、三八译码器原理

二、使用verilog编写三八译码器

1.使用verilog代码如下:

2.verilog的数据类型

(1)wire类型

(2)reg类型

三、使用verilog编写全加器

1.一位全加器

 2.四位全加器

3.八位全加器 

总结


一、三八译码器原理

三八译码器的输入信号有三个,相当于有八个二进制编码可以输入,每个输入都对应着一个输出信号,其真值表如下图所示:

virtuoso绘制38译码器,fpga开发

根据真值表使用logsim设计三八译码器的仿真电路图,该图如下:

virtuoso绘制38译码器,fpga开发

二、使用verilog编写三八译码器

1.使用verilog代码如下:

module decoder_3_8(a,b,c,out);
    input a,b,c;
    output [7:0] out;
    reg [7:0] out;
    always @(a,b,c) begin
        case({a,b,c})
        3'b000:out=8'b0000_0001;
        3'b001:out=8'b0000_0010;
        3'b010:out=8'b0000_0100;
        3'b011:out=8'b0000_1000;
        3'b100:out=8'b0001_0000;
        3'b101:out=8'b0010_0000;
        3'b110:out=8'b0100_0000;
        3'b111:out=8'b1000_0000;
        endcase
    end
endmodule

 在Quartus里面创建工程,编写代码后生成的RTL电路如下图所示:

virtuoso绘制38译码器,fpga开发

仿真结果如下:

virtuoso绘制38译码器,fpga开发

       相较于原始设计电路来说Quartus生成的电路更为简洁,它将中间逻辑门实现的电路使用了一个模块封装起来,直观上来说只能看见输入与输出的形式,对其实现过程不甚了解,它的仿真测试结果与真值表一致。

2.verilog的数据类型

Verilog 最常用的 2 种数据类型就是线型(wire)与寄存器型(reg),其余类型可以理解为这两种数据类型的扩展或辅助。

(1)wire类型

      wire相当于一根导线,无数据储存功能,无驱动能力,通常用于以assign关键字指定的组合逻辑信号,模块的输入输出类型通常默认的是此类型。

(2)reg类型

always模块内被赋值的信号,必须定义为reg型,默认初始值是x。

reg表示一定要有触发,输出才会反映输入,可以用于组合逻辑或者时序逻辑,能存储数据,有驱动能力,在always @模块表达式左侧被赋值。

寄存器(reg)用来表示存储单元,它会保持数据原有的值,直到被改写。

因此不能将上面代码中的reg类型改为wire类型,否则会出现语法错误。

三、使用verilog编写全加器

1.一位全加器

首先在logsim中设计仿真电路图,如下所示:

virtuoso绘制38译码器,fpga开发

根据仿真电路图就可以用verilog门级描述生成电路,代码和生成的RTL电路如下:

module adder_1bit(a,b,c,sum,cout);
	input a,b,c;
	output sum,cout;
	wire t1,t2,t3;
	xor x1(t1,a,b);
	and x2(t2,t1,c);
	and x3(t3,a,b);
	xor x4(sum,t1,c);
	or x5(cout,t2,t3);
endmodule

virtuoso绘制38译码器,fpga开发

使用过门级电路过后,我们使用verilog的行为级语言进行描述,代码和RTL电路如下所示:

module shiyan1(
	//输入信号,ain表示被加数,bin表示加数,cin表示低位向高位的进位
	input ain,bin,cin,
	//输出信号,cout表示向高位的进位,sum表示本位的相加和
	output reg cout,sum

);
reg s1,s2,s3;
always @(ain or bin or cin) begin
	sum=(ain^bin)^cin;//本位和输出表达式
	s1=ain&cin;
	s2=bin&cin;
	s3=ain&bin;
	cout=(s1|s2)|s3;//高位进位输出表达式
end
endmodule

 virtuoso绘制38译码器,fpga开发

相较于门级电路描述方法而言 ,行为级描述更为简洁,但对于逻辑的要求性更高

 2.四位全加器

verilog使用门级电路,代码和电路图如下:

module full_adder_4(A,B,C,sum,cout);
	input A,B,C;
	output cout,sum;
	wire t1,t2,t3,t4;
	and U1(t1,A,B);
	and U2(t2,A,C);
	and U3(t3,B,C);
	or U4(cout,t1,t2,t3);
	xor U5(t4,A,B);
	xor U6(sum,t4,C);
endmodule

virtuoso绘制38译码器,fpga开发

 verilog行为级描述如下:

module adder_4bit(A,B,C,cout,sum);
   input A,B,C;
	output sum,cout;
	wire t1,t2,t3;
	assign sum=A^B^C;
	assign t1=A&B,
			 t2=A&C,
			 t3=B&C;
	assign cout=t1|t2|t3;
endmodule

virtuoso绘制38译码器,fpga开发

3.八位全加器 

      八位全加器是在一位全加器的基础上实现的,根据先前的一位全加器的原理将输入的八位信号依次相加。

//1位全加器模块
module adder_1bit(s, cout, a, b, cin);
	//输入输出端口定义
	output s, cout;
	input a, b, cin;
	
	//采用行为描述的方式实现1位全加器
	assign s = a ^ b ^ cin;
	assign cout = a & b | a & cin | b & cin;
endmodule

//8位加法器顶层模块
module adder_8bit(s, cout, a, b, cin);
	//输入输出端口及变量定义
	output [7 : 0] s;
	output cout;
	input [7 : 0] a, b;
	input cin;
	wire [6 : 0] carry;
	
	//采用结构描述的方式实现一个8位加法器
	adder_1bit m0(s[0], carry[0], a[0], b[0], cin);
	adder_1bit m1(s[1], carry[1], a[1], b[1], carry[0]);
	adder_1bit m2(s[2], carry[2], a[2], b[2], carry[1]);
	adder_1bit m3(s[3], carry[3], a[3], b[3], carry[2]);
	adder_1bit m4(s[4], carry[4], a[4], b[4], carry[3]);
	adder_1bit m5(s[5], carry[5], a[5], b[5], carry[4]);
	adder_1bit m6(s[6], carry[6], a[6], b[6], carry[5]);
	adder_1bit m7(s[7], cout, a[7], b[7], carry[6]);
endmodule


virtuoso绘制38译码器,fpga开发

参考资料:

小梅哥——38译码器-CSDN博客


总结

       使用verilog编写代码可以用门级电路描述,也可以用行为描述。前者需要先画出电路图然后再写代码,过程比较繁琐且后期修改不易;后者需要弄清楚输入输出量的逻辑关系,然后再用赋值语句写对于编写者的逻辑要求较高,不过描述更加简洁,后期修改也更加容易。文章来源地址https://www.toymoban.com/news/detail-765896.html

到了这里,关于使用verilog编写三八译码器及四位全加器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog实现 3-8译码器

    拨码开关 LED(低电平有效) 000 11111110 001 11111101 010 11111011 011 11110111 100 11101111 101 11011111 110 10111111 111 01111111 Quartus 联合 Modelsim仿真的相关设置如下: 成功运行的情况应该是会在这个界面 接下来介绍一些常用的按钮(菜单) 经过检查波形图,可以确认是符合我们的预期

    2024年02月08日
    浏览(30)
  • Verilog 3线-8线译码器设计

    任务描述 相关知识 3线-8线译码器的功能 case语句 编程要求 说明  源代码 设计一个3线-8线译码器。运用Verilog HDL进行设计,完善译码器的功能描述风格代码,具备组合逻辑电路的设计仿真和测试的能力。 需要掌握: 1.3线-8线译码器的功能; 2.如何用case语句进行逻辑功能的描

    2024年02月08日
    浏览(40)
  • Verilog 编程实现 3-8 译码器 FPGA

    Verilog 编程实现 3-8 译码器 FPGA FPGA 是一种可重构的数字电路芯片,可用于实现各种逻辑电路。在 FPGA 中,我们可以使用 Verilog HDL(硬件描述语言)来编写数字电路设计。本篇文章将为您介绍如何使用 Verilog 实现基本的数字电路,即 3-8 译码器。 3-8 译码器是一种常用的数字电路

    2024年02月07日
    浏览(32)
  • 【Quartus | verilog 系列】实现 3-8译码器

    实验一: 3-8译码器(原理图输⼊设计)  2.1设计输⼊     1. 将3-8译码器A、B、C端作为输⼊,Y作为输出。     2. 其余引脚按照3-8译码器功能要求连接。     1. 激励⽂件的输⼊包含A、B、C的8种状态     2. 功能仿真 1. 给出3-8译码器的真值表: 2. 实验步骤、实验内容

    2024年02月11日
    浏览(27)
  • 北邮22级信通院数电:Verilog-FPGA(7)第七周实验(2):BCD七段显示译码器(关注我的uu们加群咯~)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.verilog代码 1.1 decoder_led.v 1.2 decoders.v 二.管脚分配 三.效果展示 四

    2024年02月04日
    浏览(40)
  • 74138译码器详解

    74138也叫74LS138 参考 百度百科讲的非常详细了。 在这个图中,当6号口通高电平,4、5号口通低电平(因为通了低电平, E 2 ‾ overline {E2} E 2 , E 3 ‾ overline{E3} E 3 , 会变成高电平输入到译码器中)时,译码器开始工作。 然后1、2、3,也就是A0,A1,A2对应输入3位二进制数,从最

    2024年02月01日
    浏览(72)
  • 3-8译码器

      3-8译码器,就是把3种输入状态翻译成8种输出状态,译码器是将输入的具有特定含义的二进制代码翻译成输出信号的不同组合,实现电路控制功能的逻辑电路。译码器在数字系统中应用广泛,可用于代码的转换、终端数字的显示、数据的分配等等。   通过简单的3-8译码

    2024年02月11日
    浏览(28)
  • 小梅哥——38译码器

    三八译码器,即是 3 种输入状态翻译成 8 种输出状态。 真值表 代码展示 testbench 仿真图 补充 (1)always语句两种触发方式 a、第一种是 电平触发 ,例如always @(a or b or c), a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。 b、第二种是 沿触发 ,例如always @(po

    2023年04月17日
    浏览(32)
  • FPGA_38译码器

    本文来自《小梅哥FPGA视频》的笔记整理 不要眼高手低,一定一定要实践,自己动手去敲一遍!!! 在数字电路中可以根据电路功能的不同分为,组合逻辑电路与时序逻辑电路。 组合逻辑 电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状

    2023年04月11日
    浏览(28)
  • 138译码器的工作原理

    E1.E2.E3为三个使能输入端,其中E1和E2为低有效,E3为高有效,除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高; 当S1 = 0 或S2’ + S3’ = 1 时,译码器被禁止工作,当S1 = 1时,S2’+S3’ = 0 时,译码器处于工作状态。 A0,A1,A2为3位二进制加权地址输入端口,A2A1A0顺序组成

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包