专题三:系列检测器及系列脉冲发生器设计讲述

上传人:最**** 文档编号:116879070 上传时间:2019-11-17 格式:PPT 页数:19 大小:92KB
返回 下载 相关 举报
专题三:系列检测器及系列脉冲发生器设计讲述_第1页
第1页 / 共19页
专题三:系列检测器及系列脉冲发生器设计讲述_第2页
第2页 / 共19页
专题三:系列检测器及系列脉冲发生器设计讲述_第3页
第3页 / 共19页
专题三:系列检测器及系列脉冲发生器设计讲述_第4页
第4页 / 共19页
专题三:系列检测器及系列脉冲发生器设计讲述_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《专题三:系列检测器及系列脉冲发生器设计讲述》由会员分享,可在线阅读,更多相关《专题三:系列检测器及系列脉冲发生器设计讲述(19页珍藏版)》请在金锄头文库上搜索。

1、专题三:系列脉冲检测器及系列脉冲发生器 一、教学内容:系列脉冲检测器及系列脉冲发生器 二、教学目的及要求: 1、掌握VHDL语言的基本结构及编程思想。 2、掌握系列脉冲检测器及系列脉冲发生器的设 计方法。 三、授课课时:4课时 设计要求: 1、设计一个8位系列脉冲检测器。 要求所检测系列可预置,检测到与预置的系列码相同的系列 ,输出“A”,否则输出“B”。 2、设计一个系列脉冲发生器。所产生的系列可以预置。 (并行串行数据转换) (脉冲发生器) 一、系列脉冲检测器 比较器(将接受到的DIN,在clk控制下与DI进行比较,只有在 连续8个时钟下比较的结果均相同,则输出“A”。 D70 DIN(串

2、行码输入) CLK AB 方法一: 思考:假如时钟不同,DIN和D70不变,检测结果还相同吗? 方法一参考程序: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY xljcq IS PORT( clk,clr,din : IN STD_LOGIC; D: in std_logic_vector(7 downto 0); ab : out std_logic_vector(3 downto 0); END xljcq; ARCHITECTURE a OF xljcq IS sign

3、al Q: integer range 0 to 8; -记录比较的次数 BEGIN process(clk,clr) begin if clr=1 then Q if din=D(7) then Q=1; else Q if din=D(6) then Q=2; else Q if din=D(5) then Q=3; else Q if din=D(4) then Q=4; else Q if din=D(3) then Q=5; else Q if din=D(2) then Q=6; else Q if din=D(1) then Q=7; else Q if din=D(0) the

4、n Q=8; else Q Q=0; end case; End if; End process; Process(Q) Begin if Q=8 then AB=“1010”; else AB=“1011”; end if; End process; End a; 仿真结果: 一、系列脉冲检测器 可预置系列码存储单元 比较器(将接受到的DIN,在clk控制下与DI进行比较,只有在 连续8个时钟下比较的结果均相同,则输出“A”。 D70 LOAD DIN(串行码输入) CLK AB 方法二: QQ 方法二参考程序: LIBRARY ieee; USE ieee.std_logic_1164.a

5、ll; USE ieee.std_logic_unsigned.all; ENTITY xljcq IS PORT( clk,clr,din,load : IN STD_LOGIC; DD: in std_logic_vector(7 downto 0); ab : out std_logic_vector(3 downto 0); END xljcq; ARCHITECTURE a OF xljcq IS signal Q: integer range 0 to 8; signal D: std_logic_vector(7 downto 0); BEGIN process(clk,clr,

6、load) begin if clr=1 then Q=0; elsif clkevent and clk=1 then if load=1 then D if din=D(7) then Q=1; else Q if din=D(6) then Q=2; else Q if din=D(5) then Q=3; else Q if din=D(4) then Q=4; else Q if din=D(3) then Q=5; else Q if din=D(2) then Q=6; else Q if din=D(1) then Q=7; else Q if din=D(0) then Q=

7、8; else Q Q=0; end case; End if; End if; End process; Process(Q) Begin if Q=8 then AB=“1010”; else AB=“1011”; end if; End process; End a; 一、系列脉冲检测器 可预置系列码存储单元 比较器(将接受到的DIN,在clk控制下与DI进行比较,只有在 连续8个时钟下比较的结果均相同,则输出“A”。 D70 LOAD DIN(串行码输入) 状态机 CLK AB 接单脉冲按钮 方法三: S0 S1 S2 S3S5 S6 S7 S4 DIN=D(7),AB=“B” DIN

8、=D(6) ,AB=“B” DIN=D(5) ,AB=“B” DIN=D(4), AB=“B”DIN=D(3), AB=“B” DIN=D(2) AB=“B” DIN=D(1) AB=“B” DIN=D(0) AB=“A” DIN不等于DI,AB=“B” LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY xljcq IS PORT( clk,clr,din : IN STD_LOGIC; ab : out std_logic_vector(3 downto 0); END xlj

9、cq; ARCHITECTURE a OF xljcq IS type states is (s0,s1,s2,s3,s4,s5,s6,s7); signal current_states,next_states:states; BEGIN reg:process(clk) begin if clkevent and clk=1 then current_states=next_states; end if; end process; com:process(clr,din,current_states,next_states) begin 方法三参考程序: if clr=1 then nex

10、t_states=s0;ab ab=“1011“;if din=1 then next_states=s1; else next_states ab=“1011“;if din=1 then next_states=s2; else next_states ab=“1011“;if din=0 then next_states=s3; else next_states ab=“1011“;if din=1 then next_states=s4; else next_states ab=“1011“;if din=1 then next_states=s5; else next_states

11、ab=“1011“;if din=1 then next_states=s6; else next_states ab=“1011“;if din=0 then next_states=s7; else next_states if din=1 then next_states=s0;ab=“1010“; else next_states=s0; abnext_states=s0; ab=“1011“; end case; end if; end process; END a; 思考题: 上例中为固定检测“110111101”系列码的程序,如 何将其修改为系列码可以预置的? 二、系列脉冲发生器

12、设计(串行输出) 系列码存储器 LOAD 右移移位器 CLK 系列码输出 D70 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY xlmout IS PORT( clk,load : IN STD_LOGIC; d: in std_logic_vector(7 downto 0) dout:in std_logic); END xlmout ; ARCHITECTURE a OF xlmout IS signal q:std_logic_vector(7 downto 0); BEGIN process(clk,load) begin if load=1 then q=d; elsif clkevent and clk=1 then q(6 downto 0)=q(7 downto 1); end if; end process; dout=q(0); End a;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号