EDA技术与应用讲义第5章第2节VHDL基本语句(二)基本单元电路表达.ppt_第1页
EDA技术与应用讲义第5章第2节VHDL基本语句(二)基本单元电路表达.ppt_第2页
EDA技术与应用讲义第5章第2节VHDL基本语句(二)基本单元电路表达.ppt_第3页
EDA技术与应用讲义第5章第2节VHDL基本语句(二)基本单元电路表达.ppt_第4页
EDA技术与应用讲义第5章第2节VHDL基本语句(二)基本单元电路表达.ppt_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 VHDL基本语句(二) 课程讲义,合肥工业大学 彭良清,下一章,上一章,上一章内容 回顾,先看一个VHDL代码的例子 简单代码结构:端口定义和电路逻辑表达 代码文件命名 进程(PROCESS) VHDL代码中的:Port,Siganl,Variable 学会简单VHDL设计的三板斧 VHDL与C 代码中的函数 的区别 ? 操作符 & 数据类型 & 赋值语句 逻辑分支语句:IF;CASE, 循环语句(LOOP),本章内容,VHDL代码中的时序逻辑和组合逻辑表达 语句的执行时间问题 (顺序语句 包) 属性定义语句 库的使用,VHDL代码中的 时序逻辑 和 组合逻辑表达,不完整的 条件语句 构成 时序电路 完整的 条件语句 构成 组合逻辑电路 Q: 何为 时序电路 和 组合逻辑电路 ?,不完整的 条件语句 的VHDL,ENTITY COMP_BAD IS PORT ( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ENTITY COMP_BAD; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS(a1,b1) BEGIN IF a1 b1 THEN q1 = 1; ELSIF a1 b1 THEN q1 = 0; END IF; END PROCESS; END ARCHITECTURE one;,请看图,不完整的 条件语句 的电路图,IF a1 b1 THEN q1 = 1; ELSIF a1 b1 THEN q1 = 0; END IF;,ENTITY COMP_GOOD IS PORT ( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ENTITY COMP_GOOD; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS(a1,b1) BEGIN IF a1 b1 THEN - comparing it with example 4_9,p82 q1 = 1; ELSE q1 = 0; END IF; END PROCESS; END ARCHITECTURE one;,改进的 代码,请看,改进代码的电路图,请将a1,b1的 数据位数 变成 8 位, 观察 RTL 图 ?,IF a1 b1 THEN q1 = 1; ELSE q1 = 0; END IF;,时序逻辑之:信号边沿检测,信号边沿( 或者 )触发 是 时序逻辑 的 基本单元 那么,在VHDL中 如何 检测信号的跳变?,VHDL代码中的 边沿信号检测(EVENT 语句),上升沿检测 IF CLKEVENT AND CLK = 1 THEN Q = D; END IF; 下降沿检测 IF CLKEVENT AND CLK = 0 THEN Q = D; END IF; 3:更多的沿检测代码,更多的: 边沿 信号检测 的VHDL代码 表达(一),ENTITY DFF1 IS PORT ( CLK : IN BIT; D : IN BIT; Q : OUT BIT ); END ENTITY DFF1; ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND (CLK=1) AND ( CLKLAST_VALUE = 0) THEN Q = D; END IF; END PROCESS; END ARCHITECTURE bhv;,详细参见: p83_ex4_11,更多的: 边沿 信号检测 的VHDL代码 表达(二),ENTITY DFF1 IS PORT ( CLK : IN BIT; D : IN BIT; Q : OUT BIT ); END ENTITY DFF1; ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS(CLK) BEGIN IF CLK 1 AND CLKLAST_VALUE = 0 THEN - comparing with example 11 Q = D; END IF; END PROCESS; END ARCHITECTURE bhv;,详细参见: p83_ex4_12,更多的: 边沿 信号检测 的VHDL代码 表达(三),LIBARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF13 IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q : OUT STD_LOGIC ); END ENTITY DFF13; ARCHITECTURE bhv OF DFF13 IS SIGNAL Q1:STD_LOGIC; BEGIN PROCESS(CLK) BEGIN IF rising_edge(CLK) THEN - comparing with example 4-11,4_12 - “rising_edge“ defined in STD_LOGIC_1164 libary Q1 = D; END IF; Q = Q1; END PROCESS; END ARCHITECTURE bhv;,详细参见: p83_ex4_13,他们有何不同?,萝卜白菜,各人所爱 都是 填胞肚子 _,再看3段 沿检测? 代码,PROCESS BEGIN wait until CLK = 1; Q = D; END PROCESS;,PROCESS( CLK ) BEGIN IF CLK = 1 THEN Q = D; END IF; END PROCESS;,PROCESS( CLK ,D) BEGIN IF CLK = 1 THEN Q = D; END IF; END PROCESS;,详细参见: p84_ex4_16,详细参见: p84_ex4_15,详细参见: p84_ex4_14,不 推 荐 使 用!,VHDL语句的 执行时间顺序 问题,和 软件语言的 重要差异。 很令人困惑 的 问题! 眼见为实,先看 example:,执行时间:例子,PROCESS( A, B, C, D ) BEGIN D = A; X = B + D; D = C; Y = B + D; END PROCESS,PROCESS(A,B,C) VARIABLE D : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN D := A ; X = B + D; D := C; Y = B + D; END PROCESS,详细参见: xd_p35_ex3_1A,详细参见: xd_p35_ex3_1B,X= ? (B+A) Y=? (B+C),X= ? (B+C) Y=? (B+C),结论: 关于 VHDL代码的 执行时间 顺序问题,signal 和 variable 代入语句的执行时间不同 variable 代入后,其数值立即发生改变! signal 代入后,数值不立即改变,只有在下次PROCESS启动后才改变。 利用siganl的特性可设计 多级缓冲器电路,更多论述 参考,8位4级 缓冲器电路,PROCESS( CLK,RESET ) BEGIN IF( RESET = 0 ) THEN sgIDATA1 = X“00“; sgIDATA2 = X“00“; sgIDATA3 = X“00“; sgIDATA4 = X“00“; ELSIF ( CLKevent AND CLK=0) THEN sgIDATA1 = IDATA; sgIDATA2 = sgIDATA1; sgIDATA3 = sgIDATA2; sgIDATA4 = sgIDATA3; END IF; ODATA = sgIDATA4; END PROCESS;,详细参见: Hfut01_buffer4,电路图,Signal ?,8位4级 缓冲器电路:电路图,代码参见: Hfut01_buffer4,8位4级 缓冲器电路:仿真图,再看2个signal和variable的例子,ARCHITECTURE body_mux4 OF mux4 IS SIGNAL muxval : integer 7 downto 0; BEGIN PROCESS ( i0, i1, i2, i3, a, b ) BEGIN muxval q q q q null; END CASE; END PROCESS; END ARCHITECTURE body_mux4;,ARCHITECTURE body_mux4 OF mux4 IS BEGIN PROCESS ( i0, i1, i2, i3, a, b ) VARIABLE muxval : integer 7 downto 0; BEGIN muxval := 0; IF ( a= 1 ) THEN muxval := muxval + 1; END IF; IF ( b= 1 ) THEN muxval := muxval + 2; END IF; CASE muxval is WHEN 0 = q q q q null; END CASE; END PROCESS; END ARCHITECTURE body_mux4;,详细参见: p123_ex5_10,详细参见: p123_ex5_11,图,图,4选1 选择器的电路图(5-10代码),4选1 选择器的电路图(5-11代码),差之毫厘 谬之千里,上面 2 个图的 差异?,看似相似的代码, 生成的电路 却 大相径庭! 产生了 不需要的 时序电路单元(DFF),顺序语句 & 并行语句,多个顺序语句的 执行时间顺序 同 代码书写的 先后次序 多个并行语句 的 执行时间 相同,与 代码书写的次序 无关,顺序语句,VHDL那些语句是 顺序语句?,共11种 Case Statement Exit Statement Loop Statement If Statement Next Statement Null Statement Procedure Call Statement Return Statement Signal Assignment Statement Variable Assignment Statement Wait Statement,并行语句,VHDL那些语句是 并行语句?,共6种 Block Statement Component Instantiation Statement Concurrent Procedure Call Statement Concurrent Signal Assignment Statement Generate Statement Process Statement,Signal Assignment Statement & Concurrent Signal Assignment Statement, : ; : POSTPONED | : POSTPONED ,基本单元电路的VHDL代码,三态门 双向缓冲器 计数器 移位寄存器 D触发器 译码器 多路选择器 加法器 乘法器,三态门:要点,三态电路是总线电路设计的必须状态 CPLD/FPGA器件 不能 在内部 产生 三态电路 只能在 端口处 产生 三态电路 内部三态电路 必须用 选择器电路 代替,三态门:图,VHDL 应如何表达 ?,LIBARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_s IS PORT ( enable, : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ENTITY tri_s; ARCHITECTURE BEHAV OF tri_s IS BEGIN PROCESS ( enable, datain ) BEGIN IF enable = 1 THEN dataout = datain; ELSE dataout = “ZZZZZZZZ“; - error code :dataout = “zzzzzzzz“; END IF; END PROCESS; END ARCHITECTURE BEHAV;,详细参见: p127_ex5_13,三态门:代码,双向缓冲器:图,VHDL 应如何表达 ?,双向缓冲器:代码,ENTITY bitri_stateok IS PORT ( control : IN STD_LOGIC; in1 : IN STD_LOGIC_VECTOR(7 DOWNTO 0); x : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); q : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ENTITY bitri_stateok; ARCHITECTURE BEHAV OF bitri_stateok IS BEGIN PROCESS ( control, q, in1 ) BEGIN IF control = 0 THEN x = q; q = “ZZZZZZZZ“; - correct code, compare with example 5_14; ELSE q = in1; x = “ZZZZZZZZ“; - the code can be omitted ! END IF; END PROCESS; END ARCHITECTURE BEHAV;,详细参见: p129_ex5_15,双向缓冲器:一个错误的代码,ENTITY bitri_state IS PORT ( control : IN STD_LOGIC; in1 : IN STD_LOGIC_VECTOR(7 DOWNTO 0); x : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); q : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ENTITY bitri_state; ARCHITECTURE BEHAV OF bitri_state IS BEGIN PROCESS ( control, q, in1 ) BEGIN IF control = 1 THEN x = q; - error code, compare with example 5_15; ELSE q = in1; x = “ZZZZZZZZ“; - the code can be omitted ! END IF; END PROCESS; END ARCHITECTURE BEHAV;,详细参见: p129_ex5_14,电路图是?,双向端口:ex5_14 & ex5_15,ex5_14,ex5_14,双向端口:设计提示,如果一个双向端口 用于输入模式, 必须使得 原来呈现 输出模式 的端口 为“Z”状态,4位计数器(一),ENTITY CNT4 IS PORT ( CLK : IN BIT; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ); END ENTITY CNT4; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1; END IF; END PROCESS; END ARCHITECTURE bhv;,详细参见: p108_ex5_1,不推荐类型: BUFFER,4位计数器(二),ENTITY CNT4 IS PORT ( CLK : IN BIT; Q : OUT STD_LOGIC_VECTOR( 3 DOWNTO 0 ) ); END ENTITY CNT4; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR( 3 DOWNTO 0 ); BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1; END IF; END PROCESS; Q=Q1; END ARCHITECTURE bhv;,详细参见: p110_ex5_2,可以吗?,Q1 = Q1 + 1; ?,ENTITY CNT10 IS PORT ( CLK, RST, EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END ENTITY CNT10; ARCHITECTURE bhv OF CNT10 IS BEGIN PROCESS(CLK,RST,EN) VARIABLE CQI: STD_LOGIC_VECTOR( 3 DOWNTO 0); BEGIN IF RST = 1 THEN CQI := (OTHERS =0 ); ELSIF CLKEVENT AMD CLK = 1 THEN IF EN = 1 THEN IF CQI =0 ); END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1 ; ELSE COUT = 0; END IF; CQ = CQI END PROCESS; END ARCHITECTURE bhv;,有复位和时钟使能的 10进制异步计数器,详细参见: p113_ex5_3,移位寄存器 74HC164,VHDL表达 ?,移位寄存器 74HC164 VHDL表达,ENTITY dev164 IS PORT(a, b, nclr, clock : IN BIT; q : BUFFER BIT_VECTOR(0 TO 7); END dev164; ARCHITECTURE version1 OF dev164 IS BEGIN PROCESS(a,b,nclr,clock) BEGIN IF nclr = 0 THEN q = “00000000“; ELSE IF clockEVENT AND clock = 1 THEN FOR i IN qRANGE LOOP IF i = 0 THEN q(i) = (a AND b); ELSE q(i) = q(i-1); END IF; END LOOP; END IF; END IF; END PROCESS; END version1;,详细参见: hfut03_TTL74164_SHIFT,同步并行置位 移位寄存器,LIBARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS PORT ( CLK, LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END ENTITY SHFRT; ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS ( CLK, LOAD ) VARIABLE REG8 : STD_LOGIC_VECTOR( 7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN REG8 := DIN; ELSE REG8( 6 DOWNTO 0) := REG8 ( 7 DOWNTO 1 ); END IF; END IF; QB = REG8 ( 0); END PROCESS; END ARCHITECTURE behav;,详细参见: p115_ex5_4,D触发器,ENTITY DFF14 IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q : OUT STD_LOGIC ); END ENTITY DFF14; ARCHITECTURE bhv OF DFF14 IS BEGIN PROCESS BEGIN wait until CLK = 1; Q = D; END PROCESS; END ARCHITECTURE bhv;,详细参见: p84_ex4_14,3-8 译码器,ARCHITECTURE RTL OF decoder_3_to_8 IS SIGNAL indata : STD_LOGIC_VECTOR ( 2 DOWNTO 0 ); BEGIN indata y y y y y y y y y = “XXXXXXXX“; END CASE; ELSE y = “11111111“; END IF; END PROCESS; END ARCHITECTURE RTL;,3-8 译码器: VHDL表达,详细参见: xd_p141_ex7_11,2选1 多路选择器,详细参见: p70_ex4_1,ENTITY mux21a IS PORT ( a, b : IN BIT; S : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE ONE OF mux21a IS BEGIN y = a when s=0 else b; END ARCHITECTURE ONE;,2选1 多路选择器:RTL图,加法器:问题,加法器是 硬件 实现数学运算 的最重要元件 乘法器和除法器均可分解为加法运算 在位数较多时,加法运算的时间控制很重要 超前 进位位是 缩短 加法运算的重要技术 如何 实现 加法器: A = B + C ? 一个 重要参考文献: 蒋维隆 算 术 逻 辑 部 件 /advance.htm,一位全加器:真值表,一位全加器:VHDL表达,entity adder is port ( a : in std_logic; b : in std_logic; cin : in std_logic; - 进位位 sum : out std_logic; - 和位 cout : out std_logic); - 进位位 end adder; - description of adder using concurrent signal assignments architecture rtl of adder is begin sum = (a xor b) xor cin; cout = (a and b) or (cin and a) or (cin and b); end rtl;,RTL 图,一位全加器:RTL图,全加器的延时问题,高位运算 必须等 低位进位 来到后 才能进行。 因此,它的延迟 非常可观。 无法胜任 高速运算肯定,问题的解决:,采用 超前进位链 具体过程,请参考: 蒋维隆 算 术 逻 辑 部 件 /advance.htm,The end.,以下内容 为 正文的引用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论