从零学verilog系列(4)组合逻辑电路设计方法

这篇具有很好参考价值的文章主要介绍了从零学verilog系列(4)组合逻辑电路设计方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

1.组合电路设计方法

1.1真值表方式(本质是最小项表达式)

1.2逻辑表达式方式

1.3结构描述方式

1.4抽象描述方式(从电路功能出发)

2组合电路设计项目

2.1数字加法器

半加器(1位加法器)

全加器

串行进位加法器(行波进位加法器)

超前进位加法器

2.2数据比较器

2.3数据选择器(MUX)

2.4数字编码器

2.4.1 BCD编码器

2.4.2 8线—3线编码器

2.4.3 8线—3线优先编码器

2.4.4 余3编码

2.5数字译码器

2.6数字校验器

组合电路特点:电路中任意时刻的稳态输出仅仅取决于该时刻的输入,而与电路原来的状态无关。(该电路无记忆功能,只有输入到输出的通路,无从输出到输入的回路)

1.组合电路设计方法

       设计一个3个裁判的表决电路,当两个或两个以上裁判同意时,判决器输出1,否则输出0.下面用四种方式分别设计。

1.1真值表方式(本质是最小项表达式)

//A    B    C    OUT
  0    0    0    0
  0    0    1    0
  0    1    0    0
  0    1    1    1
  1    0    0    0
  1    0    1    1
  1    1    0    1
  1    1    1    1
module voter(A,B,C,out);
input    A,B,C;
output   out;
reg  out;
always@(*)
    begin
        case({A,B,C})
            3'b000:out <= 0;
            3'b001:out <= 0;
            3'b010:out <= 0;
            3'b011:out <= 1;
            3'b100:out <= 0;
            3'b101:out <= 1;
            3'b110:out <= 1;
            3'b111:out <= 1;
        endcase
    end
endmodule                     

1.2逻辑表达式方式

将真值表用卡诺图来表示,然后化解电路得到逻辑函数表达式  out = AB+BC+AC

nodule voter(A,B,C,out);
input      A,B,C;
output     out;
assign out = (A&B)|(B&C)|(A&C)
endmodule

1.3结构描述方式

从逻辑表达式out=AB+BC+AB可获得其基本的电路结构图,根据结构图门级建模即可。

module voter(A,B,C,out);
input  A,B,C;
output out;
wire w1,w2,w3;
and U1(w1,A,B);
and U2(w2,B,C);
and U3(w3,A,C);
or  U4(out,w1,w2,w3);
endmodule

1.4抽象描述方式(从电路功能出发)

module voter(A,B,C,out);
input A,B,C;
output out;
wire [1:0] sum;
assign sum = A+B+C;
always@(sum)
    begin
        if(sum>1)
            out = 1;
        else
            out = 0;
    end
endmodule

2组合电路设计项目

2.1数字加法器

半加器(1位加法器):如果不考虑有来自地位的进位将两个1位二进制数相加,称为半加,实现半加运算的电路称为半加器。

全加器:再将两个多位二进制相加时,除了最低位以外,每一位都应考虑来自低位的进位,即:将两个对应位的加数和来自低位的进位3个数相加,所用的电路称为全加电路。

串行进位加法器(行波进位加法器):使用全加器,依次将低位加法器的进位输出端co接到高位全加器的进位输入端,因每一位的相加结果都必须等到低一位的进位来到之后才能建立,因此这种结构的电路称为~

从零学verilog系列(4)组合逻辑电路设计方法

超前进位加法器:引入生成信号和传播信号,高位的运算不需要等待低位运算完成

这一级进位输入信号Ci+1与上一级的两个加数Ai Bi、上一级的进位输入信号的关系:

从零学verilog系列(4)组合逻辑电路设计方法

第一行包含了所有可能出现进位的情况,第二行为化解之后的结果。

从零学verilog系列(4)组合逻辑电路设计方法

从零学verilog系列(4)组合逻辑电路设计方法

超前进位加法器是一种高速加法器,可提高运算速度,缩短延时   。

//2输入8bit加法器
module eight_bits_fulladder(sum,cout,a,b,c,cin);
input    [7:0] a,b,cin;
output   [7:0] sum;
output         cout;
assign {cout,sum} = a+b+cin;
endmodule

//4bit超前进位加法器  
module fastAdder_4(sum,c_out,a,b,c_in); 
input[3:0] a,b,c_in; 
output[3:0] sum,c_out; 

wire[3:0] g,p; 
wire[4:0] c; 


assign p=a^b;  	 //传播信号
assign g=a&b;    //生成信号
assign c[0]=c_in; 
assign c[1]=g[0]|(p[0]&c[0]);                         //推导公式 
assign c[2]=g[1]|(p[1]&(g[0]|(p[0]&c[0]))); 
assign c[3]=g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0]))))); 
assign c[4]=g[3]|(p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))))));
assign sum = p^c[3:0]; 
assign c_out=c[4]; 
endmodule

2.2数据比较器

数据比较器分为两类:一是等值比较器,只能检测两个数是否一致:二是量值比较强,能比较两个数的大小。

//8bit数据比较强
module comp_8bit(a,b,agb,aeb,a1b);
input    [7:0]    a,b;
output   agb,aeb,a1b;
reg    agb,aeb,a1b;  //agb代表a>b,aeb代表a=b;
always@(a or b)
    begin
        if(a>b)
            {agb,aeb,a1b} = 3'b100;
        else if(a<b)
            {agb,aeb,a1b} = 3'b001;
        else
            {agb,aeb,a1b} = 3'b010;
    end
endmodule

2.3数据选择器(MUX)

常用条件运算符、if_else、case语句等方式实现其功能。

//以4选1选择器为例,用2选1选择器构成的4选1选择器
//有4个数据输入端,2个选择输入端,一个数据输出端。真值表如图:
sel[1]     sel[0]     d_out
0            0        d_in[0]
0            1        d-in[1]
1            0        d_in[2]
1            1        d_in[3]
//条件运算符实现
module mux4to1(d_in,sel,d_out);
input    [3:0] d_in;
input    [1:0] sel;
output         d_out;
wire     [1:0] w1; //sel[0]选择之后的结果
assign w1 = sel[0]?{d_in[3],d_in[1]}:{d_in[2],d_in[0]};
assign d_out = sel[1]? w1[1]:w1[0];
endmodule

//if_else语句实现
module mux4to1(d_in,sel,d_out);
input    [3:0] d_in;
input    [1:0] sel;
output         d_out;
reg            d_out;
always@(*)
    begin
        if(sel[1]==1)
            begin
                if(sel[0]==1)
                    d_out=d_in[3];
                else
                    d_out=d_in[2]; 
            end
        else
            begin
                if(sel[0]==1)
                     d_out=d_in[1];
                else
                     d_out=d_in[0];
            end
    end
endmodule

//case语句实现
module mux4to1(d_in,sel,d_out);
input    [3:0] d_in;
input    [1:0] sel;
output         d_out;
reg            d_out;
always@(*)
    begin
        case(sel)
            2'b00:d_out <= d_in[0];
            2'b01:d_out <= d_in[1];
            2'b10:d_out <= d_in[2];
            2'b11:d_out <= d_in[3];
        endcase
    end
endmodule

2.4数字编码器(用n位二进制码来表示m个特定信息,2的n次方>=m)

用二进制代码表示有关的信号称为编码,所用电路称为数据编码器。

2.4.1 BCD编码器:用一组二进制数来表示一个给定的十进制数(也称10线—4线编码器)

//8421BCD编码器代码如下:

module BCD8421(d_in,d_out);
input [8:0]d_in;
output [3:0]d_out;
reg [3:0]d_out;
always@(d_in)
case(d_in)
9'b000000000:d_out=4'b0000;
9'b000000001:d_out=4'b0001;
9'b000000010:d_out=4'b0010;
9'b000000100:d_out=4'b0011;
9'b000001000:d_out=4'b0100;
9'b000010000:d_out=4'b0101;
9'b000100000:d_out=4'b0110;
9'b001000000:d_out=4'b0111;
9'b010000000:d_out=4'b1000;
9'b100000000:d_out=4'b1001;
default d_out= 4'b0000;
endcase
endmodule

2.4.2 8线—3线编码器

其特点为任何时刻只允许输入一个有效信号,若出现两个或两个以上有效信号,电路就会中断。

module code8_3(din,dout);
input [7:0]din;
output [2:0]dout;
reg [3:0]dout;
always@(din)
case(din)
8'b00000001:dout=3'b000;
8'b00000010:dout=3'b001;
8'b00000100:dout=3'b010;
8'b00001000:dout=3'b011;
8'b00010000:dout=3'b100;
8'b00100000:dout=3'b101;
8'b01000000:dout=3'b110;
8'b10000000:dout=3'b111;    //任何时刻只有一个输入端为高电平(有效信号)
default:dout=3'b000;
endcase
endmodule

2.4.3 8线—3线优先编码器

普通编码器的缺点是:在任何时刻只能有一个输入有效,若不是的话输出会出错,有一定局限性。

为了克服这种缺点,采用优先编码器,其是当多个输入端同时有信号时,电路只对其中优先级别最高的输入信号进行编码。

module code8_3_p(din,dout,en,ys,yex);
input [7:0]din;
input en;
output ys,yex;
output [2:0]dout;
reg [2:0]dout;
reg ys,yex;
always@(din or en)
if(en) {dout,ys,yex}={3'b111,1'b1,1'b1};
else begin
casex(din)
8'b0???????:{dout,ys,yex}={3'b000,1'b1,1'b0};
8'b10??????:{dout,ys,yex}={3'b001,1'b1,1'b0};
8'b110?????:{dout,ys,yex}={3'b010,1'b1,1'b0};
8'b1110????:{dout,ys,yex}={3'b011,1'b1,1'b0};
8'b11110???:{dout,ys,yex}={3'b100,1'b1,1'b0};
8'b111110??:{dout,ys,yex}={3'b101,1'b1,1'b0};
8'b1111110?:{dout,ys,yex}={3'b110,1'b1,1'b0};
8'b11111110:{dout,ys,yex}={3'b111,1'b1,1'b0};
8'b11111111:{dout,ys,yex}={3'b111,1'b0,1'b1};
endcase
end
endmodule

2.4.4 余3编码


十进制  8421BCD码  余3码
0     0000     0011
1     0001     0100
2     0010     0101
3     0011     0110
4     0100     0111
5     0101     1000
6     0110     1001
7     0111     1010
8     1000     1011
9     1001     1100


module code_yu3(d_in,d_out);
input [3:0]d_in;
output [3:0]d_out;
assign d_out=d_in+4'b0011;  //842`BCD码加4'b0011就是当前所表达十进制数所对应的余3码
endmodule

2.5数字译码器(功能是将n个输入码进行翻译,转换为2的n次方个输出信号)

译码器就是对编码器的反操作,这里就不多赘述了。

举例3线—8线译码器如下:

module decode3_8(en,din,dout);
input [2:0]din;
input en;
output [7:0]dout;
reg [7:0]dout;
always@(en or din)
if(!en) dout=8'b0;
else case(din)
3'b000:dout=8'b00000001;
3'b001:dout=8'b00000010;
3'b010:dout=8'b00000100;
3'b011:dout=8'b00001000;
3'b100:dout=8'b00010000;
3'b101:dout=8'b00100000;
3'b110:dout=8'b01000000;
3'b111:dout=8'b10000000;
endcase
endmodule

2.6数字校验器

        数字信息在传输和存储过程中,由于噪声和外界干扰因素会出错,可用奇偶校验器检查数据是否出错,但无法确定错误发生在哪。功能为检测数据中包含1的个数是奇数还是偶数。文章来源地址https://www.toymoban.com/news/detail-442740.html

module checker(din,odd,even);
parameter w=8;
input [w-1:0]din;
output odd,even;
assign odd=^din;   //偶校验,归约运算符的运用
assign even=!odd;  //奇校验,也可写为  assign even = ~(^din);
endmodule

到了这里,关于从零学verilog系列(4)组合逻辑电路设计方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【实验六】组合逻辑电路的设计

    【实验六】组合逻辑电路的设计

       

    2024年02月10日
    浏览(8)
  • 用译码器来设计组合逻辑电路

    用译码器来设计组合逻辑电路

     三线到八线:输入端只有三个所以只能是三变量  我们先来看书上的一个例子  设计的过程第一步 将函数表达式整理成最小项和的形式 我们用来举例,不是最小项的形式 三变量函数可以用三变量的最小项来表示  为了看的更清楚,我们写成 最小项的编号 ,这样子更好看

    2024年02月08日
    浏览(33)
  • Verilog学习笔记(3):Verilog数字逻辑电路设计方法

    Verilog学习笔记(3):Verilog数字逻辑电路设计方法

    例:用Verilog设计模256(8bits)计数器 (a)可综合程序描述方式 (b)常见的错误描述方式 同时Verilog的电路描述方式具有多样性,这也决定了对于电路设计的多样性。 例:用Verilog设计数字多路选择器 (a)采用真值表形式的代码 (b)采用逻辑表达式形式的代码 (c)采用结

    2023年04月08日
    浏览(16)
  • 组合逻辑电路的设计(二) -- 五路输入呼叫显示电路和两个BCD8421码的加法运算电路

    组合逻辑电路的设计(二) -- 五路输入呼叫显示电路和两个BCD8421码的加法运算电路

    1. 设计要求(2题任选1题,鼓励2题都做) (1) 设计一个五路输入呼叫显示电路,5个数码开关分别模拟用户的输入信号,用户优先权按用户编号依次递减,即1号的优先权最高,5号最低;1至5号按键输入时,七段数码管对应显示1、2、3、4、5十进制编码数字,无用户呼叫时数码

    2024年02月09日
    浏览(11)
  • 【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

    【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例:表决器(三人表决器)。 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2023年04月08日
    浏览(11)
  • 数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

    数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

    所有的是时序逻辑电路都可以拆成组合逻辑电路+存储 (关于组合逻辑电路的理解可以参考我数电的博客https://blog.csdn.net/y_u_yu_yu_/article/details/127592466) 可以分成两个部分,组合逻辑电路和存储电路。组合逻辑电路的输入一个是x信号一个是当前的状态,这两个信号决定了组合

    2024年02月06日
    浏览(64)
  • 【FPGA】组合逻辑电路三种建模方式(Verilog HDL 门级建模、Verilog HDL 数据流建模、组合电路行为级建模)

    【FPGA】组合逻辑电路三种建模方式(Verilog HDL 门级建模、Verilog HDL 数据流建模、组合电路行为级建模)

    目录   Verilog HDL 门级建模 各种逻辑门的表示和使用 门级建模书写实例 Verilog HDL 数据流建模 数据流建模 数据流建模书写实例 组合电路行为级建模 always语句 条件语句 多路分支语句 循环语句 for while repeat forever 行为级建模示例   可以理解为对逻辑电路中各个门依次进行描述

    2024年04月13日
    浏览(26)
  • 【FPGA】Verilog:组合逻辑电路应用 | 数码管 | 8421BCD编码 | 转换七段数码管段码

    【FPGA】Verilog:组合逻辑电路应用 | 数码管 | 8421BCD编码 | 转换七段数码管段码

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:数码管的使用 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月03日
    浏览(13)
  • 数字逻辑电路设计课程设计

    数字逻辑电路设计课程设计

    1、学会应用数字系统设计方法进行电路设计; 2、进一步提高quartus II软件的开发应用能力; 3、提高VHDL进行综合设计的能力; 4、培养学生书写综合实验报告的能力。 1、设计平台:quartus II+HH-SOPC-EP1C12 EDA/SOPC实验开发平台 2、设计方法:利用VHDL代码和/或原理图方法,采用层次

    2024年02月01日
    浏览(46)
  • 数字逻辑基础实验二—时序逻辑电路的设计

    数字逻辑基础实验二—时序逻辑电路的设计

    实验目的 (1)掌握中规模集成寄存器构成的时序逻辑电路的设计方法。 (2)掌握中规模集成计数器设计N进制计数器的方法。 (3)学会用时序功能器件构成综合型应用电路。 实验电路 图 2-1红绿灯电路 实验软件与环境 软件  Multisim 14.2 环境  Windows 11 专业版21H2 设备名称 

    2023年04月21日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包