EDA技术实用教程深入学习VHDL.pptx
2023/3/23 P.1VHDL 与图形化输入比较与图形化输入比较易于修改功能强大可移植性更强第1页/共61页2023/3/23 P.2图形化输入 vs VHDL图形化更所见即所得VHDL 则是告诉系统要什麽功能,而编译器给出相应的硬件第2页/共61页2023/3/23 P.3学习学习 VHDL 要学习要学习组合逻辑 Combinatorial Logic时序逻辑 Sequential Logic并行语句 Concurrent Statement顺序语句 Process Statement第3页/共61页2023/3/23 P.4组合逻辑组合逻辑Combinatorial LogicCombinatorial Logic if 输出是由输入决定的逻辑函数如译码器 decoders,多路开关multiplexers和加法器 adders输出随输入立即变换第4页/共61页2023/3/23 P.5时序逻辑时序逻辑Sequential Logic时序逻辑Sequential Logic输出是输入和电路原状态共同决定的函数包含寄存器如状态机.State Machine,计数器 Counters,移位寄存器Shift Register,控制器Controllers输出取决于输入和现态Register is used to hold the previous value第5页/共61页2023/3/23 P.6并行语句并行语句Concurrent Statement同时并发执行与书写前后无关并行语句是:输出仅取决于输入Entity test1 IsPort(a,b:in bit;c,d:out bit);end test1;architecture test1_body of test1 isbeginc=a and b;d=a or b;end test1_body;Entity test1 IsPort(a,b:in bit;c,d:out bit);end test1;architecture test1_body of test1 isbegind=a or b;c=a and b;end test1_body;并发执行与书写顺序无关输出取决于输入而没有任何条件限制第6页/共61页2023/3/23 P.7相同C=A and BD=A OR Bc=a and b;d=a or b;d=a or b;c=a and b;第7页/共61页2023/3/23 P.8Process Statement进程描述进程描述所有进程 Process 并发执行在进程描述Process中,代码按序执行进程描述是:输出取决于输入和敏感信号,共同控制事件发生。第8页/共61页2023/3/23 P.9Entity test1 isPort(clk,d1,d2:in bit;q1,q2:out bit);end test1;architecture test1_body of test1 isbeginProcess(clk,d1)beginif(clkevent and clk=1)thenq1=d1;end if;end process;Process(clk,d2)beginif(clkevent and clk=1)thenq2=d2;end if;end process;end test1_body;Entity test1 isPort(clk,d1,d2:in bit;q1,q2:out bit);end test1;architecture test1_body of test1 isbeginProcess(clk,d2)beginif(clkevent and clk=1)thenq2=d2;end if;end process;Process(clk,d1)beginif(clkevent and clk=1)thenq1=d1;end if;end process;end test1_body;两个PROCESS并发执行在PROCESS中代码顺序执行在条件限制下输出取决于输入第9页/共61页2023/3/23 P.10两个PROCESS并发执行第10页/共61页2023/3/23 P.11How to.?组合逻辑Combinational Logic能被下面语句实现 并行赋值语句Concurrent Signal Assigment Statements单纯描述组合逻辑的Process 语句,没有任何时钟边延的约束第11页/共61页2023/3/23 P.12并行语句并行语句设计组合逻辑设计组合逻辑第12页/共61页2023/3/23 P.13并行语句并行语句Concurrent Statements分类(1)信号赋值语句Signal Assigments(2)条件赋值语句 Conditional Signal Assigments(3)选择赋值语句Selected Signal Assigments第13页/共61页2023/3/23 P.14(1)信号赋值语句信号赋值语句Signal Assigment 并行运行Entity test1 isport(a,b,e:in bit;c,d:out bit);end test1;architecture test1_body of test1 isbeginc=a and b;d=e;end test1_body;第14页/共61页2023/3/23 P.15支持的逻辑支持的逻辑ANDNANDORNORXORNOTmore.第15页/共61页2023/3/23 P.16我要我要 5输入与门输入与门Entity test1 isport(a,b,c,d,e:in bit;f:out bit);end test1;architecture test1_body of test1 isbeginf=a and b and c and d and e;end test1_body;第16页/共61页2023/3/23 P.17(2)条件赋值语句条件赋值语句Conditional Signal Assigments当条件成立时赋值例如选多路开关 2 to 1 multiplexerEntity test1 isport(in1,in2,sel:in bit;d:out bit);end test1;architecture test1_body of test1 isbegind=in1 when sel=0 else in2;end test1_body;第17页/共61页2023/3/23 P.18要更多要更多-4 选选1 多路开关多路开关Entity test1 isport(in1,in2,in3,in4:in bit;sel1,sel2:in bit;d:out bit);end test1;architecture test1_body of test1 isbegind=in1 when sel1=0 and sel2=0 else in2 when sel1=0 and sel2=1 else in3 when sel1=1 and sel2=0 else in4;end test1_body;第18页/共61页2023/3/23 P.19(3)选择信号赋值选择信号赋值Select Signal Assignments输出随相应的选择条件被赋值Entity test1 isport(a,b:in bit;sel :in bit;c:out bit);end test1;architecture test1_body of test1 isbeginwith sel select c=a when 1,b when 0;end test1_body;第19页/共61页2023/3/23 P.20想要更多想要更多If I want more choice-It is easyEntity test1 isport(in1,in2,in3,in4:in bit;sel :in integer;out1:out bit);end test1;architecture test1_body of test1 isbeginwith sel select out1=in1 when 0,in2 when 1,in3 when 2,in4 when 3;end test1_body;第20页/共61页2023/3/23 P.21练习练习将图形转化为 VHDL第21页/共61页2023/3/23 P.22设计要求设计要求用 WHEN-ELSE实现100010001other第22页/共61页2023/3/23 P.23示例示例Entity test1 isport(high,medium,low:in bit;highest_level3,highest_level2:out bit;highest_level1,highest_level0:out bit);end test1;architecture test1_body of test1 isbeginhighest_level3=1 when high=1 and medium=0 and low=0 else 0;highest_level2=1 when high=0 and medium=1 and low=0 else 0;highest_level1=1 when high=0 and medium=0 and low=1 else 0;highest_level0=0 when high=1 and medium=0 and low=0 else 0 when high=0 and medium=1 and low=0 else 0 when high=0 and medium=0 and low=1 else 1;end test1_body;第23页/共61页2023/3/23 P.24仿真仿真第24页/共61页2023/3/23 P.25用用Process 语句语句设计组合电路设计组合电路第25页/共61页2023/3/23 P.26进程语句进程语句Process Statement规则 Process中语句顺序执行所有 Process 必须有敏感信号表 SENITIVITY LIST一旦敏感信号变了,触发Process运行除非有Wait语句第26页/共61页2023/3/23 P.27第27页/共61页2023/3/23 P.28模板模板 Process Statement用敏感信号表“SENSITIVITY LISTSENSITIVITY LIST”name:PROCESS(sensitivity_list)begin sequential statement#1 sequential statement#2 .sequential statement#NEND PROCESS name;通用写法Process()begin.end process敏感信号表顺序执行语句名称可选第28页/共61页2023/3/23 P.29举例举例Entity test1 isport(a,b,sel1,sel2:in bit;result:out bit);end test1;architecture test1_body of test1 isbeginprocess(sel1,sel2,a,b)beginif(sel1=1)thenresult=a;elsif(sel2=1)thenresult=b;elseresult=0;end if;end process;end test1_body;输出随 sel1,sel2,a 或 b 变化而变化等一下:我可以用并行语句完成第29页/共61页2023/3/23 P.30Entity test1 isport(a,b,sel1,sel2:in bit;result:out bit);end test1;architecture test1_body of test1 isbeginresult=a when sel1=1 else b when sel2=1 else 0;end test1_body;Entity test1 isport(a,b,sel1,sel2:in bit;result:out bit);end test1;architecture test1_body of test1 isbeginprocess(sel1,sel2,a,b)beginif(sel1=1)thenresult=a;elsif(sel2=1)thenresult=b;elseresult=0;end if;end process;end test1_body;同样功能,不同实现方式Concurrent StatementProcess Statement第30页/共61页2023/3/23 P.31Q:两者区别 Concurrent and Process Statement?A:对简单例子,Concurrent and Process 都可.但一些复杂例子只有用Process Statement。第31页/共61页2023/3/23 P.32How to.?时序逻辑Sequential Logic可以这样实现:Process Statement 描述逻辑,附加时钟限制第32页/共61页2023/3/23 P.33用用Process 设计设计时序逻辑时序逻辑第33页/共61页2023/3/23 P.34怎样做锁存器怎样做锁存器 LatchEntity test1 isport(clk,d,reset:in bit;q:out bit);end test1;architecture test1_body of test1 isbeginprocess(clk,d,reset)begin if(reset=1)then q=0;elsif(clk=1)then q=d;end if;end process;end test1_body;Reset 先取得控制权Clk后取得控制权在 process中语句顺序执行第34页/共61页2023/3/23 P.35这是 LATCH第35页/共61页2023/3/23 P.36如果我如下修改如果我如下修改.Entity test1 isport(clk,d,reset:in bit;q:out bit);end test1;architecture test1_body of test1 isbeginprocess(clk)begin if(reset=1)then q=0;elsif(clk=1)then q=d;end if;end process;end test1_body;注意:结果完全不同这是什麽?第36页/共61页2023/3/23 P.37这是触发器 Flip-Flop 不是锁存器 LATCH第37页/共61页2023/3/23 P.38为什麽我得到为什麽我得到Flip-Flop 而不是而不是 Latch锁存器的Sensitivity listprocess(clk,d,reset)触发器的 Sensitivity listprocess(clk)Q:Sensitivity list 用来干什麽?A:输出随 Sensitivity list 变第38页/共61页2023/3/23 P.39我们现在知道 VHDL 是强大的,但如果你不知道自己作什麽,你不会得到想要的结果你想要 latch 但事实上你得到了 Flip-Flop第39页/共61页2023/3/23 P.40sequential statements 的顺序有何影响的顺序有何影响?ex1:PROCESS(a,b)BEGIN IF a=1 THEN c=0;-若 a、b 都为 END IF;IF b=1 THEN c=1;-b 优先 END IF;-故c=1;END PROCESS ex1;ex2:PROCESS(a,b)BEGIN IF b=1 THEN c=1;-若 a、b 都为 END IF;-IF a=1 THEN c=0;-a优先 END IF;-故c=1;END PROCESS ex2;第40页/共61页2023/3/23 P.41Processes中信号赋值的注意事项中信号赋值的注意事项看下列的代码,那种电路是综合的结果?PROCESS(clock)BEGINIF rising_edge(clock)THENb=a;-在 clock 上升延后,a 赋给 bc=b;-在 clock 上升延后,b赋给 c END IF;END PROCESS;aclockcbacclock OR第41页/共61页2023/3/23 P.42Signal Assignment in Processes在进程中,信号不是被立即更新,而是在预定的时间被更新信号事实上直到执行到END PROCESS才被更新所以,前面综合出两个寄存器(c=b 中的是原来的状态 b)在某些时候,外面用并行语句会解决此问题,但不是总有效。如何解决?第42页/共61页2023/3/23 P.43Variables当并行信号赋值不能在process 外使用时,可用 variable解决问题Variables 和 signals类似,但只用在 PROCESS中.不能在 processes间传输信息Variables 可以是VHDL中任何数据类型赋给 variable 的值立即生效用分号结束赋值(:),如下:c:=a AND b;第43页/共61页2023/3/23 P.44cVariables vs.Signals用 variable 解决前面的问题:PROCESS(clock)VARIABLE b:std_logic;BEGIN IF rising_edge(clock)THEN b:=a;-立即赋值生效c=b;-按预定时间赋值生效 END IF;END PROCESS;aclock第44页/共61页2023/3/23 P.45另外一种编码另外一种编码LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY tdff ISPORT(clk,d:in std_logic;q:out std_logic);END tdff;ARCHITECTURE behaviour OF tdff ISBEGINPROCESSBEGINwait until clk=1;q=d;END PROCESS;END behaviour;第45页/共61页2023/3/23 P.46IF-THEN-ELSE vs WATI UNTILLIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY tdff ISPORT(clk,d:in std_logic;q:out std_logic);END tdff;architecture behaviour OF tdff ISBEGINPROCESSBEGINwait until clk=1;q=d;END PROCESS;END behaviour;Entity test1 isport(clk,d:in bit;q:out bit);end test1;architecture test1_body of test1 isbeginprocess(clk)begin if(clk=1)then q=d;end if;end process;end test1_body;Entity test1 isport(clk,d:in bit;q:out bit);end test1;architecture test1_body of test1 isbeginprocess(clk,d)begin if(clk=1 and clkevent)then q=d;end if;end process;end test1_body;第46页/共61页2023/3/23 P.47ReviewConcurrent Statement 用来设计组合逻辑combinational logic(无触发器)如译码器 decoders,多路开关multiplexers和加法器 addersProcess Statement 用来设计组合逻辑combinational logic(无触发器)时序逻辑Sequential logic(触发器)如状态机.State Machine,计数器 Counters,移位寄存器Shift Register,控制器Controllers第47页/共61页2023/3/23 P.48第48页/共61页2023/3/23 P.49ENTITY test1 ISPORT(clk,a,b,c:in bit;d:out bit);END test1;architecture test1_body of test1 isbegind=(a and b)xor c);end test1_body;Is this OK?第49页/共61页2023/3/23 P.50ENTITY test1 ISPORT(clk,a,b,c:in bit;d,e:out bit);END test1;architecture test1_body of test1 isbegind=(a and b)xor c);e=(a or b)nand c);Is this OK?end test1_body;第50页/共61页2023/3/23 P.51ENTITY test1 ISPORT(clk,a,b,c:in bit;d:out bit);END test1;architecture test1_body of test1 isbeginprocess(a,b,c)begind=(a and b)xor c);end process;end test1_body;Is this OK?第51页/共61页2023/3/23 P.52ENTITY test1 ISPORT(clk,a,b,c:in bit;d,e:out bit);END test1;architecture test1_body of test1 isbeginprocess(a,b,c)begind=(a and b)xor c);e=(a or b)nand c);end process;end test1_body;Is this OK?第52页/共61页2023/3/23 P.53ENTITY test1 ISPORT(clk,a,b,c:in bit;d,e:out bit);END test1;architecture test1_body of test1 isbeginif(clkevent and clk=1)thend=(a or b)and c);end test1_body;Is this OK?第53页/共61页2023/3/23 P.54ENTITY test1 ISPORT(clk,a,b,c:in bit;d:out bit);END test1;architecture test1_body of test1 isbeginprocess(clk)beginif(clkevent and clk=1)thend=(a or b)and c);end if;end process;end test1_body;Is this OK?第54页/共61页2023/3/23 P.55ENTITY test1 ISPORT(clk,a,b,c:in bit;d,e:out bit);END test1;architecture test1_body of test1 isbeginprocess(clk,a,b,c)beginif(clkevent and clk=1)thend=(a xor b)and c);end if;e=(a or b)nand c);end process;end test1_body;Is this OK?第55页/共61页2023/3/23 P.56ENTITY test1 ISPORT(clk,a,b,c:in bit;d,e,f:out bit);END test1;architecture test1_body of test1 isbeginprocess(clk,a,b,c)beginif(clkevent and clk=1)thend=(a xor b)and c);end if;if(clkevent and clk=1)thene=(a or b)nand c);end if;if(a=1)thenf=(a or b);end if;end process;end test1_body;Is this OK?第56页/共61页2023/3/23 P.57坐下思考你的设计坐下思考你的设计YNYN第57页/共61页2023/3/23 P.58学习总结学习总结学习什么是 Combinational Logic/Circuits学习什么是 Sequential Logic/Circuits区别 Concurrent Statement 和 Process Statement第58页/共61页2023/3/23 P.59理解用途Concurrent Statement组合逻辑简单赋值语句simple signal assignment statement条件赋值语句conditional signal assignment statement选择赋值语句selected signal assignement statementProcess Statement组合逻辑时序逻辑if-then-else structure for Latchif-then-else structure for Flip-Flopwait until structure for Flip-Flop第59页/共61页2023/3/23 P.60在在VHDL 语言中最重要的事语言中最重要的事“确切地告诉我你的电路功能如何,VHDL compiler 会给你适合的电路”如 Latch 和d Flip-Flop 是个好例子第60页/共61页2023/3/23 P.61谢谢您的观看!第61页/共61页