VHDL序列检测器.docx
- 文档编号:29920926
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:13
- 大小:402.95KB
VHDL序列检测器.docx
《VHDL序列检测器.docx》由会员分享,可在线阅读,更多相关《VHDL序列检测器.docx(13页珍藏版)》请在冰豆网上搜索。
VHDL序列检测器
作业一:
序列检测器〔1110010〕
1设计功能与要求
(1)利用有限状态的状态机设计一个序列检测器,序列检测器要检测的序列设定为“1110010〞。
(2)根据设计功能和要求运用VHDL硬件描述语言进行设计编程,并且画出序列检测器的原理流程图。
(3)对设计的序列检测器程序进行仿真,并予以分析和说明。
2设计思路
3原理流程图
“1110010〞,根据有限状态机的原理进行编程,设计出符合要求的八状态的状态机的序列检测器,原理流程说明如下列图。
“1〞时,进入S2状态;为“0〞还是在S1状态。
“1〞,那么进入S3状态,为“0〞那么返回S1状态。
“1〞,那么进入S4状态,为“0〞那么返回S1状态。
“0〞,那么进入S5状态,为“0〞还是在S4状态。
“0〞,那么进入S6状态,为“1〞那么进入S2状态。
“1〞,那么进入S7状态,为“0〞那么返回S1状态。
“0〞,那么进入S8状态,为“1〞那么进入S3状态。
“1〞,那么进入S2状态,为“0〞1110010。
4序列检测器VHDL程序代码
“1110010“序列的时候,cout输出为高电平,否那么为低电平,详细程序代码如下。
libraryieee;
useieee.std_logic_1164.all;
entitysq_detis
port(cin,clr,clk:
instd_logic;
cout:
outstd_logic);
endsq_det;
architecturebehavofsq_detis
typestateis(s1,s2,s3,s4,s5,s6,s7,s8);
signalc_state,n_state:
state;
begin
process(clk,clr)
begin
if(clr='1')then
c_state<=s1;
elsif(clk'eventandclk='1')
thenc_state<=n_state;
endif;
endprocess;
process(c_state,cin)
begin
case(c_state)is
whens1=>cout<='0';
if(cin='1')then
n_state<=s2;
else
n_state<=s1;
endif;
whens2=>cout<='0';
if(cin='1')then
n_state<=s3;
else
n_state<=s1;
endif;
whens3=>cout<='0';
if(cin='1')then
n_state<=s4;
else
n_state<=s1;
endif;
whens4=>cout<='0';
if(cin='1')then
n_state<=s4;
else
n_state<=s5;
endif;
whens5=>cout<='0';
if(cin='1')then
n_state<=s2;
else
n_state<=s6;
endif;
whens6=>cout<='0';
if(cin='1')then
n_state<=s7;
else
n_state<=s1;
endif;
whens7=>cout<='0';
if(cin='1')then
n_state<=s3;
else
n_state<=s8;
endif;
whens8=>cout<='1';
if(cin='1')then
n_state<=s2;
else
n_state<=s1;
endif;
endcase;
endprocess;
endarchitecturebehav;
5仿真结果与说明
序列检测器程序仿真结果如下列图,“1110010“序列的时候,cout输出为高电平。
当没有出现“1110010〞序列时,cout输出低电平,如下如所示。
作业二:
三位任意二值序列检测器
1设计功能与要求
(1)利用有限状态的状态机设计一个序列检测器,序列检测器可以检测输入序列中的任意一个3位2进制数。
(2)根据设计功能和要求运用VHDL硬件描述语言进行设计编程,并且画出序列检测器的原理流程图。
(3)对设计的序列检测器程序进行仿真,并予以分析和说明。
2设计思路
序列检测器可用于检测任意三位2进制数,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的相同,那么输出1,否那么输出0。
设计采用有限状态机来实现序列检测器。
3原理流程图
4.RTL级表示
5.程序
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYdetect_3IS
PORT(Din:
INSTD_LOGIC;
Clk:
INSTD_LOGIC;
reset:
INSTD_LOGIC;Dout_000,Dout_001,Dout_010,Dout_011,Dout_100,Dout_101,
Dout_110,Dout_111:
OUTSTD_LOGIC
);
ENDdetect_3;
ARCHITECTURERTLOFdetect_3IS
TYPESTATEIS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14);
SIGNALpre_state,next_state:
STATE;
BEGIN
PROCESS(Din,pre_state)--InputCombinationalLogic
BEGIN
CASEpre_stateIS
WHENS0=>
IF(Din='1')THEN
next_state<=S2;
ELSE
next_state<=S1;
ENDIF;
WHENS1=>
IF(Din='1')THEN
next_state<=S4;
ELSE
next_state<=S3;
ENDIF;
WHENS2=>
IF(Din='1')THEN
next_state<=S6;
ELSE
next_state<=S5;
ENDIF;
WHENS3=>
IF(Din='1')THEN
next_state<=S8;
ELSE
next_state<=S7;
ENDIF;
WHENS4=>
IF(Din='1')THEN
next_state<=S10;
ELSE
next_state<=S9;
ENDIF;
WHENS5=>
IF(Din='1')THEN
next_state<=S12;
ELSE
next_state<=S11;
ENDIF;
WHENS6=>
IF(Din='1')THEN
next_state<=S14;
ELSE
next_state<=S13;
ENDIF;
WHENS7=>
IF(Din='1')THEN
next_state<=S8;
ELSE
next_state<=S7;
ENDIF;
WHENS8=>
IF(Din='1')THEN
next_state<=S10;
ELSE
next_state<=S9;
ENDIF;
WHENS9=>
IF(Din='1')THEN
next_state<=S12;
ELSE
next_state<=S11;
ENDIF;
WHENS10=>
IF(Din='1')THEN
next_state<=S14;
ELSE
next_state<=S13;
ENDIF;
WHENS11=>
IF(Din='1')THEN
next_state<=S8;
ELSE
next_state<=S7;
ENDIF;
WHENS12=>
IF(Din='1')THEN
next_state<=S10;
ELSE
next_state<=S9;
ENDIF;
WHENS13=>
IF(Din='1')THEN
next_state<=S12;
ELSE
next_state<=S11;
ENDIF;
WHENS14=>
IF(Din='1')THEN
next_state<=S14;
ELSE
next_state<=S13;
ENDIF;
ENDCASE;
ENDPROCESS;
PROCESS(Clk,reset)
BEGIN
IF(reset='1')then
pre_state<=s0;
ELSIF(clk'eventandclk='1')THEN
pre_state<=next_state;
ENDIF;
ENDPROCESS;
PROCESS(pre_state)
BEGIN
IF(pre_state=S7)THEN
Dout_000<='1';
ELSE
Dout_000<='0';
ENDIF;
IF(pre_state=S8)THEN
Dout_001<='1';
ELSE
Dout_001<='0';
ENDIF;
IF(pre_state=S9)THEN
Dout_010<='1';
ELSE
Dout_010<='0';
ENDIF;
IF(pre_state=S10)THEN
Dout_011<='1';
ELSE
Dout_011<='0';
ENDIF;
IF(pre_state=S11)THEN
Dout_100<='1';
ELSE
Dout_100<='0';
ENDIF;
IF(pre_state=S12)THEN
Dout_101<='1';
ELSE
Dout_101<='0';
ENDIF;
IF(pre_state=S13)THEN
Dout_110<='1';
ELSE
Dout_110<='0';
ENDIF;
IF(pre_state=S14)THEN
Dout_111<='1';
ELSE
Dout_111<='0';
ENDIF;
ENDPROCESS;
ENDRTL;
6.仿真图
仿真图分析:
输入:
11
输出:
前三个序列式111,在第四个时钟周期的上升沿,Dout_111置高电平
接着是111,在第五个周期的上升沿,Dout_111置高电平,依次类推,接着是101,对应的Dout_101为高电平。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 序列 检测器