《专题三:系列检测器及系列脉冲发生器设计讲述》由会员分享,可在线阅读,更多相关《专题三:系列检测器及系列脉冲发生器设计讲述(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;