三八译码器(小梅哥Xilinx FPGA学习笔记2——三八译码器)

发布时间:2025-12-10 19:38:31 浏览次数:3

小梅哥Xilinx FPGA学习笔记2——三八译码器-三八译码器真值表

小梅哥Xilinx FPGA学习笔记2——三八译码器三八译码器〇、功能介绍1.功能描述2.真值表一、代码编写1.设计文件2.激励文件二、总结〇、功能介绍1.功能描述译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是3种输入状态翻译成8种输出状态。2.真值表一、代码编写1.设计文件moduledecoder_3_8(a,b,c,out);inputa;//输入端口

三八译码器

〇、功能介绍 1.功能描述 2.真值表 一、代码编写 1.设计文件 2.激励文件 3.仿真图 二、总结 三、课后作业 1.设计文件 2.激励文件 3.仿真图

〇、功能介绍

1.功能描述

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。

2.真值表

一、代码编写

1.设计文件

module decoder_3_8(a,b,c,out);    input a;//输入端口a    input b;//输入端口b    input c;//输入端口c    output [7:0] out;//输出端口out    reg [7:0] out;    //或者用output reg [7:0] out//以always块描述的信号赋值,被赋值的对象必须要定义成reg类型always@(a,b,c)begin //相当于always@(*)        case({    a,b,c})//位拼接,{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'd5 :out = 8'b0010_0000            3'b110:out = 8'b0100_0000;            3'b111:out = 8'b1000_0000;                        /* 3'd0:out = 8'b0000_0001;//下划线 _ 是为了增强代码的可读性。 3'd1:out = 8'b0000_0010; 3'd2:out = 8'b0000_0100; 3'd3:out = 8'b0000_1000; 3'd4:out = 8'b0001_0000; 3'd5:out = 8'b0010_0000;//3'd5 :out = 8'b0010_0000 3'd6:out = 8'b0100_0000; 3'd7:out = 8'b1000_0000; */                    endcase    end       endmodule

是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活CLion DataGrip DataSpell dotCover dotMemory dotTrace GoLand PhpStorm PyCharm ReSharper ReShaC++ Rider RubyMine WebStorm 全家桶 刷新

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…

2.激励文件

`timescale 1ns/1nsmodule decoder_3_8_tb();    reg s_a;    reg s_b;    reg s_c;    wire [7:0] out;            decoder_3_8 decoder_3_8(     .a(s_a),     .b(s_b),     .c(s_c),     .out(out)    );    initial begin        s_a=0;s_b=0;s_c=0; //在0时刻三个输入均为0        #200;              //经过200ns的延时        s_a=0;s_b=0;s_c=1; //在200ns时输入信号的值        #200;              //又经过200ns的延时        s_a=0;s_b=1;s_c=0; //在400ns时输入信号的值        #200;              //又经过200ns的延时        s_a=0;s_b=1;s_c=1; //在600ns时输入信号的值        #200;        s_a=1;s_b=0;s_c=0;        #200;        s_a=1;s_b=0;s_c=1;        #200;        s_a=1;s_b=1;s_c=0;        #200;        s_a=1;s_b=1;s_c=1;        #200;              $stop;             //停止仿真    endendmodule

3.仿真图

二、总结

1.case开始开始,endcase结束;
2.数字声明时,合法的基数格式有 4 中,包括:十进制(‘d 或 ‘D),十六进制(‘h 或 ‘H),二进制(’b 或 ‘B),八进制(’o 或 ‘O)。数值可指明位宽,也可不指明位宽。

数字10的不同表示方式,'前面的数字表示位数,'后面的一个字母字母表示进制格式b 二进制   4'b1010 0 八进制   2'o12 d 十进制   2'd10h 十六进制 1'ha

3.Verilog 中有 2 种注释方式:用 // 进行单行注释;

    reg [7:0] out;//或者用output reg [7:0] out

用 /* 与 */ 进行跨行注释:

  /* 3'd0:out = 8'b0000_0001; 3'd1:out = 8'b0000_0010; 3'd2:out = 8'b0000_0100; 3'd3:out = 8'b0000_1000; 3'd4:out = 8'b0001_0000; 3'd5:out = 8'b0010_0000;//3'd5 :out = 8'b0010_0000 3'd6:out = 8'b0100_0000; 3'd7:out = 8'b1000_0000; */

3.标识符与关键字;标识符(identifier)可以是任意一组字母、数字、$ 符号和 _(下划线)符号的合,但标识符的第一个字符必须是字母或者下划线,不能以数字或者美元符开始。
另外,标识符是区分大小写的。
关键字是 Verilog 中预留的用于定义语言结构的特殊标识符。
Verilog 中关键字全部为小写。

    input a;//input 为关键字, a 为标识符    input b;//input 为关键字, a 为标识符    input c;//input 为关键字, a 为标识符    output reg [7:0] out;//output 、reg 为关键字, out 为标识符

4.数值的种类

Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑:0:逻辑 0 或 "假"1:逻辑 1 或 "真"x 或 X:未知z 或 Z:高阻x 意味着信号数值的不确定,即在实际电路里,信号可能为 1,也可能为 0。z 意味着信号处于高阻状态,常见于信号(input, reg)没有驱动时的逻辑结果。例如一个 pad 的 input 呈现高阻状态时,其逻辑值和上下拉的状态有关系。上拉则逻辑值为 1,下拉则为 0 。

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

线网(wire)
wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。如果没有驱动元件连接到 wire 型变量,缺省值一般为 “Z”。举例如下:

    wire [7:0] out;

线网型还有其他数据类型,包括 wand,wor,wri,triand,trior,trireg 等。这些数据类型用的频率不是很高。
寄存器(reg)
寄存器(reg)用来表示存储单元,它会保持数据原有的值,直到被改写。

     reg s_a;     reg s_b;     reg s_c;

例如在 always 块中,寄存器可能被综合成边沿触发器,在组合逻辑中可能被综合成 wire 型变量。寄存器不需要驱动源,也不一定需要时钟信号。在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。例如:

     reg s_a;     reg s_b;     reg s_c;     initial begin     s_a=0;s_b=0;s_c=0; //在0时刻三个输入均为0     #200;              //经过200ns的延时     end

三、课后作业

4-16译码器

1.设计文件

`timescale 1ns / 1nsmodule decoder_4_16(a,b,c,d,out   );   input a;   input b;   input c;   input d;   output reg[15:0] out;always@(a,b,c,d)begin   case({    a,b,c,d})       4'b0000:out=16'b0000_0000_0000_0001;       4'b0001:out=16'b0000_0000_0000_0010;       4'b0010:out=16'b0000_0000_0000_0100;       4'b0011:out=16'b0000_0000_0000_1000;       4'b0100:out=16'b0000_0000_0001_0000;       4'b0101:out=16'b0000_0000_0010_0000;       4'b0110:out=16'b0000_0000_0100_0000;       4'b0111:out=16'b0000_0000_1000_0000;       4'b1000:out=16'b0000_0001_0000_0000;       4'b1001:out=16'b0000_0010_0000_0000;       4'b1010:out=16'b0000_0100_0000_0000;       4'b1011:out=16'b0000_1000_0000_0000;       4'b1100:out=16'b0001_0000_0000_0000;       4'b1101:out=16'b0010_0000_0000_0000;       4'b1110:out=16'b0100_0000_0000_0000;       4'b1111:out=16'b1000_0000_0000_0000;           /* 2'd00:out=16'b0000_0000_0000_0001; 2'd01:out=16'b0000_0000_0000_0010; 2'd02:out=16'b0000_0000_0000_0100; 2'd03:out=16'b0000_0000_0000_1000; 2'd04:out=16'b0000_0000_0001_0000; 2'd05:out=16'b0000_0000_0010_0000; 2'd06:out=16'b0000_0000_0100_0000; 2'd07:out=16'b0000_0000_1000_0000; 2'd08:out=16'b0000_0001_0000_0000; 2'd09:out=16'b0000_0010_0000_0000; 2'd10:out=16'b0000_0100_0000_0000; 2'd11:out=16'b0000_1000_0000_0000; 2'd12:out=16'b0001_0000_0000_0000; 2'd13:out=16'b0010_0000_0000_0000; 2'd14:out=16'b0100_0000_0000_0000; 2'd15:out=16'b1000_0000_0000_0000;*/   endcaseend       endmodule

2.激励文件

`timescale 1ns / 1nsmodule decoder_4_16_tb();reg s_a;reg s_b;reg s_c;reg s_d;wire [15:0] out;  decoder_4_16 decoder_4_16(.a(s_a),.b(s_b),.c(s_c),.d(s_d),.out(out));initial begins_a=0;s_b=0;s_c=0;s_d=0;#100;s_a=0;s_b=0;s_c=0;s_d=1;#100;s_a=0;s_b=0;s_c=1;s_d=0;#100;s_a=0;s_b=0;s_c=1;s_d=1;#100;s_a=0;s_b=1;s_c=0;s_d=0;#100;s_a=0;s_b=1;s_c=0;s_d=1;#100;s_a=0;s_b=1;s_c=1;s_d=0;#100;s_a=0;s_b=1;s_c=1;s_d=1;#100;s_a=1;s_b=0;s_c=0;s_d=0;#100;s_a=1;s_b=0;s_c=0;s_d=1;#100;s_a=1;s_b=0;s_c=1;s_d=0;#100;s_a=1;s_b=0;s_c=1;s_d=1;#100;s_a=1;s_b=1;s_c=0;s_d=0;#100;s_a=1;s_b=1;s_c=0;s_d=1;#100;s_a=1;s_b=1;s_c=1;s_d=0;#100;s_a=1;s_b=1;s_c=1;s_d=1;#100;   endendmodule

3.仿真图

后记:勿谓寸阴短,既过难再获。勿谓一丝微,既绍难再白。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477