verilog基本语法-case语句-译码电路,编码电路,选择器电路

概述:

本节主要讲解LUT构造的组合逻辑电路中的译码电路,编码电路,选择器电路。这些基本电路是使用的最广泛的电路,但是一般情况下很容易忽略这些电路。其中译码电路是构成RAM中写地址的电路,而选择电路是构成RAM中数据读出的地址。编码电路用于模数转换器ADC的编码等。这些都是使用FPGA的过程 中经常用到的,但是容易忽视他的设计原理。本节通过基本的verilog语句来测试这些电路的构造原理。

使用case语句构造

case(a)
_:_;
...
endcase

主要内容

1.译码电路

2.编码电路

3.选择器电路

1.译码电路

代码

module assign1(
	input[1:0] A,
	output reg [3:0]	y
    );
	
always @(*)
	 case (A)
		2'b00   : y <= 4'b0001;
		2'b01   : y <= 4'b0010;
		2'b10   : y <= 4'b0100;
		2'b11   : y <= 4'b1000;
		default : y <= 4'b0000;
	 endcase
endmodule

RTL结构图

verilog基本语法-case语句-译码电路,编码电路,选择器电路_第1张图片

技术原理图

verilog基本语法-case语句-译码电路,编码电路,选择器电路_第2张图片

2.编码电路

代码

module assign1(
	input[3:0] A,
	output reg [1:0]	y
    );
	
always @(*)
	case (A)
            4'b0001 : y <= 2'b00;
            4'b0010 : y <= 2'b01;
            4'b0100 : y <= 2'b10;
            4'b1000 : y <= 2'b11;
            default : y <= 2'b00;
	endcase
endmodule

RTL结构图

verilog基本语法-case语句-译码电路,编码电路,选择器电路_第3张图片

技术原理图

verilog基本语法-case语句-译码电路,编码电路,选择器电路_第4张图片

3.选择电路

代码

module assign1(
	input[1:0] A,
	input din1,din2,din3,din4,
	output reg 	y,
	output  	y2
    ); 

assign y2 = A[0]? din2 : din1; // 2选1

always @(*)  // 4选1
  case (A)
	 2'b00: y = din1;
	 2'b01: y = din2;
	 2'b10: y = din3;
	 2'b11: y = din4;
  endcase
					
endmodule

RTL结构图

verilog基本语法-case语句-译码电路,编码电路,选择器电路_第5张图片

技术原理图

verilog基本语法-case语句-译码电路,编码电路,选择器电路_第6张图片

4. 总结

1. 通过awalys @(*) 语句实现组合逻辑语句

2. case语句可以实现译码电路,编码电路,选择电路的实现

3. 译码电路和编码电路会遇到宽组合逻辑设计场合,列如1G的ram的写地址线,65536位ADC的编码等,

4. 选择电路是FPGA内部结构的基本元件,他的使用频率高,使用LUT+MUX结合来设计组合电路,可以提高资源的利用率。此外选择器也作为存储器的读出地址线。

你可能感兴趣的:(fpga开发,verilog基本语法,译码器,编码器,选择器)