Presentation is loading. Please wait.

Presentation is loading. Please wait.

设计描述 从16位乘法器的设计谈起.

Similar presentations


Presentation on theme: "设计描述 从16位乘法器的设计谈起."— Presentation transcript:

1 设计描述 从16位乘法器的设计谈起

2 组合逻辑电路 描述

3 组合逻辑电路描述 同步时序逻辑电路的时钟频率直接取决于组合通路(包括数据通路、控制通路)的延迟时间;
在深亚微米工艺条件下,组合逻辑通路的延迟时间与组合逻辑通路的延迟级数(即逻辑级数)密切相关; 降低组合逻辑通路的逻辑级数成为组合通路设计优化的关键因素; 组合逻辑电路的功耗及其所占用的芯片面积直接与电路中的单元数目、逻辑连线数目相关; 减少组合逻辑电路实现所需的单元及连线数目成为组合逻辑电路设计优化的重要因素。

4 组合逻辑电路描述 描述要点: 避免引入不必要的Latch器件; 注意HDL描述所对应的硬件结构: 尽量降低逻辑级数;
尽量减少所需的逻辑器件的数目; 注意硬件的共享 注意描述结构中信号敏感表的完整性和冗余性;

5 组合逻辑电路描述 避免出现不必要的Latch Latch的作用是什么? 什么情况下会引入Latch?
条件或分支语句中,对信号赋值说明不完全、且信号在条件或分支语句前没有初始赋值。

6 组合逻辑电路描述 …… reg A1,A2,B1,B2; reg En1,En2; reg Y1,Y2,M;
always @( En1 or En2 or A1 or A2 or B1 or B2) begin if (En1) Y1 = A1; if (En2) Y2 = !((A2 & B2) | B1) ; M = Y2 | Y1; end En1=0时,Y1取值情形 没有说明,产生Lacth En2=0时,Y2、M的取值情形 没有说明,产生Lacth以保持M、Y2 的取值

7 组合逻辑电路描述 reg [1:0] Sel; reg [1:0] Sel; reg [7:0] A, B,C,D;
reg [7:0] Y; …… Sel or A or B or C or D ) begin case(Sel) 2’b00: Y = A; 2’b01: Y = B; 2’b10: Y = C; 2’b11: Y = D; default: ; endcase end reg [1:0] Sel; reg [7:0] A, B,C,D; reg [7:0] Y; …… Sel or A or B or C or D ) begin case(Sel) 2’b00: Y = A; 2’b01: Y = B; 2’b10: Y = C; 2’b11: Y = D; endcase end 分支不满 出现Latch 分支虽满,但属于值保持, 出现Latch

8 组合逻辑电路描述 Y1、Y2在有些分支中 没有明确的赋值,导致出现 不必要的Latch reg [1:0] Sel;
reg [7:0] A, B,C,D; reg [7:0] Y1, Y2, ; …… Sel or A or B or C or D ) begin case(Sel) 2’b00: Y1 = A; 2’b01: Y 2= B; 2’b10: Y1 = C; 2’b11: Y 2= D; default: Y1 = ~(A&B) ; endcase end Y1、Y2在有些分支中 没有明确的赋值,导致出现 不必要的Latch

9 组合逻辑电路描述 外层的case语句是满的, 但内层的case语句不满, 产生Latch以保持Y1
reg [1:0] Sel1, Sel2; reg [7:0] A, B,C,D; reg [7:0] Y1; …… Sel1or Sel2 or A or B or C or D ) begin case(Sel1) 2’b00: Y1 = A + 1; 2’b01: Y 1= A + B; 2’b10: Y1 = !C ; 2’b11: case (Sel2) 2’b00: Y1 = D - A; 2’b01: Y1 = A & B; 2’b10: Y1 = A | B; 2’b11: Y1 = ! D; endcase default: Y1 = ~(A&B) ; end 每一个二进制数的取值为{ 0, 1 , X , Z }中的一个, 即有四种可能的取值 外层的case语句是满的, 但内层的case语句不满, 产生Latch以保持Y1

10 组合逻辑电路描述 + + module examp1(A1, B1, C1, A2, B2, C2, D2, Y1, Y2);
input [8:0] A1, B1, C1, A2, B2, C2, D2; output [10:0] Y1, Y2; reg [10:0] Y1, Y2; always @(A1 or A2 or B1 or B2 or C1 or C2 or D1 or D2) begin Y1 <= A1 + B1 + C1 + D1 ; Y2 <= ( A2 + B2 ) + ( C2 + D2 ) ; end endmodule + A2 B2 C2 D2 Y2 + A1 B1 C1 D1 Y1

11 组合逻辑电路描述 + + + + …….. reg [7:0] A, B, C, D, E, F, G, H; reg [8:0] Sum;
reg [1:0] sel; ………. always (sel or A or B or C or D or E or F or G or H) begin Sum=9’b0; case (Sel) 2’b00: Sum = A +B; 2’b01: Sum = C + D; 2’b10: Sum = E + F; 2’b11: Sum = G + H; endcase end ……….. A + B 1 2 3 + C Sum D E + F Sel G + H

12 组合逻辑电路描述 Sum + Sel Sel …….. reg [7:0] A, B, C, D, E, F, G, H;
reg [8:0] Sum; reg [1:0] sel; reg [7:0] add1, add2; ………. always (sel or A or B or C or D or E or F or G or H) begin {add1,add2} = 16’b0; case (Sel) 2’b00: {add1,add2} = {A , B}; 2’b01: {add1,add2} = {C , D}; 2’b10: {add1,add2} = {E , F}; 2’b11: {add1,add2} = {G , H}; endcase Sum = add1 + add2 ; end ……….. A C E G Sum Sel + B D F H Sel

13 组合逻辑电路描述 描述方式 对简单的电路结构,可用连续赋值语句加以描述; 对复杂的组合逻辑结构,用always (敏感表)Stm形式加以描述
reg [7:0] a,b; wire [7:0] c; assign c= a&b; reg a, b, cin; wire sum, cout; assign {sum,cout}= {a^b^c, (a&b)|(a&c)|(b&c)}; assign赋值语句中,被赋值的变量/信号一定为wire类型。

14 组合逻辑电路描述 描述结构: Data Path Control Path 具体电路形式: Multiplexers
Encoder / priority encoder Decoder Comparator Alu Logic /arithmetic operations

15 组合逻辑电路描述 多路选择开关 二选一开关建议用if…else…结构描述;
三/四选一开关可用if…else…结构、case/casex/casez结构描述 多选一开关建议不采用if…else…结构描述 HDL描述中,注意if…else…及其结构嵌套结构、case/casex/casez结构的完整性。

16 组合逻辑电路描述 编码/解码电路 将一组形式的二进制数据转化为另一种形式的二进制数据 形式上,编码/解码电路可采用:
if …else 及其嵌套结构; case/casex/casez描述结构; for 循环结构(一般避免采用)

17 组合逻辑电路描述 inputs Outputs A7 A6 A5 A4 A3 A2 A1 A0 Y2 Y1 Y0

18 组合逻辑电路描述 reg [7:0] A; reg [2:0] Y; reg [7:0] A; …….. reg [2:0] Y;
always @(A) casex(A) 8’b : Y=3’b000; 8’b : Y=3’b001; 8’b : Y=3’b010; 8’b : Y=3’b011; 8’b : Y=3’b100; 8’b : Y=3’b101; 8’b : Y=3’b110; 8’b : Y=3’b111; default: Y=3’bxxx; endcase reg [7:0] A; reg [2:0] Y; …….. always @(A) begin if (A==8’b ) Y=3’b000; else if (A==8’b ) Y=3’b001; else if (A==8’b ) Y=3’b010; else if (A==8’b ) Y=3’b011; else if (A==8’b ) Y=3’b100; else if (A==8’b ) Y=3’b101; else if (A==8’b ) Y=3’b110; else if (A==8’b ) Y=3’b111; else Y=3’bxxx; end

19 组合逻辑电路描述 综合结果差!!! 有时也可用for 循环结构描述编码/解码逻辑电路,但一般不建议采用(综合结果很差) 逻辑模拟结果正确
reg [7:0] A, B; reg [2:0] I, Y; …… for (I=0; I<=7;I=I+1) begin B=A; B[I] = 1’b0; if (A[I]==1’b1 && B==8’b0) Y=I; else Y=3’bxxx; end 逻辑模拟结果正确 综合结果差!!!

20 组合逻辑电路描述 inputs Outputs A7 A6 A5 A4 A3 A2 A1 A0 Y2 Y1 Y0 Valid
x x x x x x x x x x x x x x x x x x x x x 1 x x x x x x x x x x 0

21 组合逻辑电路描述 reg [7:0] A; reg [2:0] Y; reg [7:0] A; …….. reg [2:0] Y;
always @(A) begin Valid =1’b1; casex(A) 8’b1xxxxxxx: Y=3’b111; 8’b01xxxxxx: Y=3’b110; 8’b001xxxxx: Y=3’b101; 8’b0001xxxx: Y=3’b100; 8’b00001xxx: Y=3’b011; 8’b000001xx: Y=3’b010; 8’b x: Y=3’b001; 8’b : Y=3’b000; default: {Y,Valid} =4’bxxx0; endcase reg [7:0] A; reg [2:0] Y; …….. always @(A) begin Valid =1’b1; if (A[7]==1’b1) Y=3’b111; else if (A[6]==1’b1) Y=3’b110; else if (A[6]==1’b1) Y=3’b101; else if (A[6]==1’b1) Y=3’b100; else if (A[6]==1’b1) Y=3’b011; else if (A[6]==1’b1) Y=3’b010; else if (A[6]==1’b1) Y=3’b001; else if (A[6]==1’b1) Y=3’b000; else {Y, Valid} = 4’bxxx0 ; end

22 组合逻辑电路描述 Generic N to M bit binary decoder 带参数的设计描述 优点:可重用性
缺点:可能会影响综合结果的性能 Generic N to M bit binary decoder N、M: 参数,分别表示二进制数的位宽;

23 引用方式 模块名 #(参数表) 实例名(端口/信号表); ……. Reg [1:0] A; Reg [2:0] B;
module Decoder_N_M(En,A,Y); parameter N = 3; parameter M = 8; input En; input [N-1:0] A; output [M-1:0] Y; reg [M-1:0] Y; integer [N-1:0] I; always @(En or A) begin if (~En) Y = 0; else if (A>M-1) for (I=0;I<M-1;I=I+1) Y[I] = 1’bx; if (A==N) Y[N]=1’b1; else Y[N] = 1’b0; end endmodule 引用方式 模块名 #(参数表) 实例名(端口/信号表); ……. Reg [1:0] A; Reg [2:0] B; Reg EnA , EnB; Wire [3:0] DecA; Wire [5:0] DecB; Decoder_N_M #(2,4) decoder_2_4 (.En(EnA), .A(A), .Y(DecA); Decoder_N_M #(3,6) decoder_3_6 (.En(EnB), .A(B), .Y(DecB)); ……….

24 组合逻辑电路描述 比较器及比较操作 一般作为操作的选择条件 逻辑比较 操作 verilog 算术比较 == != < <=
> >= 逻辑比较 ! && ||

25 组合逻辑电路描述 算术比较器的设计 两个N位的二进制数的比较 == (!=)操作: 逻辑级数 为: logmN ;
(>=) 、<(<=)操作: 逻辑级数为: 2× logmN ;

26 组合逻辑电路描述 比较电路设计中,需注意: 比较电路的总体逻辑级数; 条件表达式中的信号到达时间的快慢;
改变条件表达式的书写次序、或利用()强制改变条件操作的顺序以降低电路的总体逻辑级数; 分析电路的逻辑级数,利用布尔函数变换将到达时间较慢的信号提前;

27 组合逻辑电路描述 ALU描述要点: 将算术运算、逻辑运算、移位操作分开;
利用case 、casex、 casez描述形式描述ALU的相关操作; 严格控制各个分支的操作条件、避免任意扩大条件范围

28 Operation Function Implementation Block S4 S3 S2 S1 S0 Cin 0 0 0 0 0 0
Y <= A Y <= A + 1 Y <= A + B Y <= A + B + 1 Y <= A + B_bar Y <= A +B_bar+1 Y <= A – 1 Y <= A and B Y <= A or B Y <= A xor B Y <= A_bar Y <= shl A Y <= shr A Y <= 0 Transfer A Increment A Addition Add with 1 A plus 1’complement of B Subtraction Decrement A AND OR XOR Complement A Shift left A Shift right A Transfer 0’s Arithmetic Unit Logic Unit Shift Unit

29 module ALU(Sel, Cin, A, B,Y);
input [4:0] Sel; input Cin; input [7:0] A, B ; output [7:0] Y; reg [7:0] Y; reg [7:0] LogicUnit, ArithUnit, ALU_NoShift; always @( Sel or A or B or Cin ) begin // Logic Operation case(Sel[1:0]) 2’b00: LogicUnit = A&B; 2’b01: LogicUnit = A | B; 2’b10: LogicUnit = A ^ B; 2’b11: LogicUnit = !A ; default: LogicUnit = 8’bx; endcase // Arithmetic Operation case( { Sel[1:0] , Cin } ) 3’b000: ArithUnit = A ; 3’b001: ArithUnit = A + 1 ; 3’b010: ArithUnit = A + B; 3’b011: ArithUnit = A + B + 1 ; 3’b100: ArithUnit = A + !B ; 3’b101: ArithUnit = A – B ; 3’b110: ArithUnit = A – 1 ; 3’b111: ArithUnit = A ; default: ArithUnit = 8’bx ; endcase //Multiplex between Logic and Arithmetic Unit if (Sel[2] ) ALU_NoShift = LogicUnit; else ALU_NoShift = ArithUnit; // Shift Operation case ( Sel[4:3] ) 2’b00: Y = ALU_NoShift; 2’b01: Y = ALU_NoShift << 1; 2’b10: Y = ALU_NoShift >> 1; 2’b11: Y = 8’b0; default: Y = 8’bx; end endmodule


Download ppt "设计描述 从16位乘法器的设计谈起."

Similar presentations


Ads by Google