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

Slides:



Advertisements
Similar presentations
欢迎您来到 心理课堂! 一首歌 1.
Advertisements

說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
第八章 互换的运用.
判断推理,必须学会这些 主讲老师:小胡胡 2016年3月25日20:00 YY频道:
电路和电流 考点知识梳理 中考典例精析 课堂达标训练 专题训练.
第十章《票据法》.
第二单元 生产、劳动与经营 第六课 投资理财的选择 一.储蓄存款和商业银行.
Introduction to Verilog
第十章 会计档案 本章主要介绍了五方面的内容:(1)会计档案的概念和内容;(2)会计档案归档;(3)会计档案的保管期限;(4)会计档案的查阅、复制和交接;(5)会计档案的销毁 本章属于非重点章, 三年试卷中所占分值各为6分、7分、7分。
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
忠孝國小自立午餐老師的叮嚀 教師指導手冊.
Chapter 5 Sequential Logic Circuit
數位邏輯設計與實習 ch04 組合邏輯電路設計.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
Greatest Common Divisor ---最大公约数
CH1 Number Systems and Conversion
第四章 组合逻辑电路 4.1 概 述 4.2 组合逻辑电路的分析与设计 4.3 常用组合逻辑电路 4.4 用PLD实现组合电路
组合逻辑2 Combinational Logic
组合逻辑 刘鹏 Mar. 17, 2015 浙江大学 信息与电子工程系
数字电子技术 Digital Electronics Technology
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
成才之路 · 语文 人教版 · 必修2 路漫漫其修远兮 吾将上下而求索.
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
數位邏輯 Digital Logic 醫務管理暨醫療資訊學系 陳以德 副教授: 濟世CS 轉
VHDL數位電路實習與專題設計 文魁資訊-UE301
第5章 程序结构.
Chapter 5 Verilog 硬體描述語言
Chapter 5 Verilog硬體描述語言
邏輯設計.
Ch01-2 Verilog語法 資料流(DataFlow)設計 行為(Behavior)設計
第17章 Verilog中的高级结构 学习内容: 任务和函数的定义和调用 怎样使用命名块 怎样禁止命名块和任务 有限状态机(FSM)及建模.
EDA技术 廖义奎.
二、相關知識 在數位系統中,資料的表示方式通常是以0與1這兩種基本型態組合而成的,資料若要作處理,則必須將它轉為處理單元所能接受的型式(碼),此即所謂的編碼(encode)。可以完成此編碼工作的電路稱為編碼器(encoder)。而當處理單元將資料處理完之後,則必須將它呈現出來,此時我們需要將它更改為人們所熟悉的資料型式,此種動作我們稱之為解碼(decode)。可以完成此解碼工作的電路稱為解碼器(decoder)。
EDA原理及应用 何宾
第四阶段实验 ISP器件的设计与应用 一、实验目的 二、实验内容与要求 三、ISP器件的开发流程 四、EDA Pro2K实验系统介绍
数字系统设计复习 Digital System Design Summary
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
C 語言簡介 - 2.
FPGA设计.
Danny Mok Altera HK FAE AHDL培训教材 Danny Mok Altera HK FAE 2018/12/9 P.1.
Verilog硬件描述语言基础.
第四阶段实验 Verilog HDL简介 1 Verilog描述的一般结构 2 Verilog HDL基础知识 3 设计举例
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
数字系统设计 Digital System Design
语法进阶.
时序电路设计 刘鹏 浙江大学信息与电子工程系 Apr. 24, 2011 EE141
时序逻辑电路实验 一、 实验目的 1.熟悉集成计数器的功能和使用方法; 2.利用集成计数器设计任意进制计数器。 二、实验原理
第二章 Java语言基础.
CPU结构和功能.
精简指令集(RISC)CPU的构造原理和设计方法
第五章 VHDL主要描述语句.
计算机学院 数字逻辑实验的要求.
计算机EDA设计 教 程 北航计算机学院 艾明晶.
设计示例一 用门级结构描述D触发器:.
组合逻辑电路 ——中规模组合逻辑集成电路.
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
大綱:整數的加法 整數的減法 蘇奕君 台灣數位學習科技股份有限公司
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
1.1.2集合间的基本关系.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
Exp4:加法器.
FPGA组合逻辑 王安然.
Verilog HDL 基本语法 STEP 2016/12/3.
按键处理部分 王安然.
第七章 基本逻辑电路设计.
幂的乘方.
Presentation transcript:

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

组合逻辑电路 描述

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

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

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

组合逻辑电路描述 …… 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 的取值

组合逻辑电路描述 reg [1:0] Sel; reg [1:0] Sel; reg [7:0] A, B,C,D; reg [7:0] Y; …… always @( 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; …… always @( 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

组合逻辑电路描述 Y1、Y2在有些分支中 没有明确的赋值,导致出现 不必要的Latch reg [1:0] Sel; reg [7:0] A, B,C,D; reg [7:0] Y1, Y2, ; …… always @( 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

组合逻辑电路描述 外层的case语句是满的, 但内层的case语句不满, 产生Latch以保持Y1 reg [1:0] Sel1, Sel2; reg [7:0] A, B,C,D; reg [7:0] Y1; …… always @( 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

组合逻辑电路描述 + + 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

组合逻辑电路描述 + + + + …….. 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

组合逻辑电路描述 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

组合逻辑电路描述 描述方式 对简单的电路结构,可用连续赋值语句加以描述; 对复杂的组合逻辑结构,用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类型。

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

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

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

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

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

组合逻辑电路描述 综合结果差!!! 有时也可用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 逻辑模拟结果正确 综合结果差!!!

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

组合逻辑电路描述 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’b0000001x: Y=3’b001; 8’b00000001: 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

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

引用方式 模块名 #(参数表) 实例名(端口/信号表); ……. 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)); ……….

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

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

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

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

Operation Function Implementation Block S4 S3 S2 S1 S0 Cin 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 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

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