概述:
本节主要讲解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结构图
技术原理图
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结构图
技术原理图
3.选择电路
代码
module assign1(input[1:0] A,input din1,din2,din3,din4,output reg y,output y2); assign y2 = A[0]? din2 : din1; // 2选1always @(*) // 4选1case (A)2'b00: y = din1;2'b01: y = din2;2'b10: y = din3;2'b11: y = din4;endcaseendmodule
RTL结构图
技术原理图
4. 总结
1. 通过awalys @(*) 语句实现组合逻辑语句
2. case语句可以实现译码电路,编码电路,选择电路的实现
3. 译码电路和编码电路会遇到宽组合逻辑设计场合,列如1G的ram的写地址线,65536位ADC的编码等,
4. 选择电路是FPGA内部结构的基本元件,他的使用频率高,使用LUT+MUX结合来设计组合电路,可以提高资源的利用率。此外选择器也作为存储器的读出地址线。