利用有限状态机进行时序逻辑的设计

合集下载

北邮电子院专业实验报告

北邮电子院专业实验报告

电子工程学院ASIC专业实验报告班级:姓名:学号:班内序号:第一部分语言级仿真LAB 1:简单的组合逻辑设计一、实验目的掌握基本组合逻辑电路的实现方法;二、实验原理本实验中描述的是一个可综合的二选一开关,它的功能是当sel = 0时,给出out = a,否则给出结果out = b;在Verilog HDL中,描述组合逻辑时常使用assign结构;equal=a==b1:0是一种在组合逻辑实现分支判断时常用的格式;parameter定义的size参数决定位宽;测试模块用于检测模块设计的是否正确,它给出模块的输入信号,观察模块的内部信号和输出信号;三、源代码module scale_muxout,sel,b,a;parameter size=1;outputsize-1:0 out;inputsize-1:0b,a;input sel;assign out = sela:selb:{size{1'bx}};endmodule`define width 8`timescale 1 ns/1 nsmodule mux_test;reg`width:1a,b;wire`width:1out;reg sel;scale_mux`widthm1.outout,.selsel,.bb,.aa;initialbegin$monitor$stime,,"sel=%b a=%b b=%b out=%b",sel,a,b,out;$dumpvars2,mux_test;sel=0;b={`width{1'b0}};a={`width{1'b1}};5sel=0;b={`width{1'b1}};a={`width{1'b0}};5sel=1;b={`width{1'b0}};a={`width{1'b1}};5sel=1;b={`width{1'b1}};a={`width{1'b0}};5 $finish;endendmodule四、仿真结果与波形LAB 2:简单时序逻辑电路的设计一、实验目的掌握基本时序逻辑电路的实现;二、实验原理在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式;在可综合的Verilog HDL模型中,我们常使用always块和posedge clk或negedge clk的结构来表述时序逻辑;在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的对于reg 型数据,如果未对它进行赋值,仿真工具会认为它是不定态;为了正确地观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位;三、源代码`timescale 1 ns/100 psmodule countercnt,clk,data,rst_,load;output4:0cnt ;input 4:0data;input clk;input rst_;input load;reg 4:0cnt;alwaysposedge clk or negedge rst_ifrst_cnt<=0;elseifloadcnt<=3 data;elsecnt<=4 cnt + 1;endmodule`timescale 1 ns/1 nsmodule counter_test;wire4:0cnt;reg 4:0data;reg rst_;reg load;reg clk;counter c1t cnt,.clk clk,.datadata,.rst_rst_,.loadload;initial beginclk=0;forever begin10 clk=1'b1;10 clk=1'b0;endendinitialbegin$timeformat-9,1,"ns",9;$monitor"time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b", $stime,data,clk,rst_,load,cnt;$dumpvars2,counter_test;endtask expect;input 4:0expects;ifcnt ==expectsbegin$display"At time %t cnt is %b and should be %b", $time,cnt,expects;$display"TEST FAILED";$finish;endendtaskinitialbeginnegedge clk{rst_,load,data}=7'b0_X_XXXXX;negedge clkexpect5'h00;{rst_,load,data}=7'b1_1_11101;negedge clkexpect5'h1D;{rst_,load,data}=7'b1_0_11101;repeat5negedge clk;expect5'h02;{rst_,load,data}=7'b1_1_11111;negedge clkexpect5'h1F;{rst_,load,data}=7'b0_X_XXXXX;negedge clkexpect5'h00;$display"TEST PASSED";$finish;endendmodule四、仿真结果与波形五、思考题该电路中,rst-是同步还是异步清零端在的always块中reset没有等时钟,而是直接清零;所以是异步清零端;LAB 3:简单时序逻辑电路的设计一、实验目的使用预定义的库元件来设计八位寄存器;二、实验原理八位寄存器中,每一位寄存器由一个二选一MUX和一个触发器dffr组成,当load=1,装载数据;当load=0,寄存器保持;对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁; 三、源代码`timescale 1 ns /1 nsmodule clockclk;reg clk;output clk;initial beginclk=0;forever begin10 clk=1'b1;10 clk=1'b0;endendendmodulemux及dffr模块调用代码mux mux7.outn17,.selload,;dffr dffr7 .qout7, .dn17, .clkclk, .rst_rst_ ;mux mux6 .outn16, .selload, .bdata6, .aout6;dffr dffr6 .qout6, .dn16, .clkclk, .rst_rst_ ;mux mux5 .outn15, .selload, .bdata5, .aout5;dffr dffr5 .qout5, .dn15, .clkclk, .rst_rst_ ;mux mux4 .outn14, .selload, .bdata4, .aout4;dffr dffr4 .qout4, .dn14, .clkclk, .rst_rst_ ;.selload, .bdata3, .aout3;dffr dffr3 .qout3, .dn13, .clkclk, .rst_rst_ ;mux mux2 .outn12, .selload, .bdata2, .aout2;dffr dffr2 .qout2, .dn12, .clkclk, .rst_rst_ ;mux mux1 .outn11, .selload, .bdata1, .aout1;dffr dffr1 .qout1, .dn11, .clkclk, .rst_rst_ ;mux mux0 .outn10, .selload, .bdata0, .aout0;dffr dffr0 .qout0, .dn10,;例化寄存器register r1.datadata,.outout,.loadload,.clkclk,.rst_rst_;例化时钟clock c1.clkclk;添加检测信号initialbegin$timeformat-9,1,"ns",9;$monitor"time=%t,clk=%b,data=%h,load=%b,out=%h",$stime,clk,data,load,out;$dumpvars2,register_test;end四、仿真结果与波形LAB 4:用always块实现较复杂的组合逻辑电路一、实验目的掌握用always实现组合逻辑电路的方法;了解assign与always两种组合逻辑电路实现方法之间的区别;二、实验原理仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方显得冗长且效率低下;适当地使用always来设计组合逻辑,会更具实效;本实验描述的是一个简单的ALU指令译码电路的设计示例;它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变化,结果都要做出及时的反应;示例中使用了电平敏感的always块,电平敏感的触发条件是指在后括号内电平列表的任何一个电平发生变化就能触发always块的动作,并且运用了case结构来进行分支判断;在always中适当运用default在case结构中和else子if…else结构中,通常可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为reg型;如果不使用default或else对缺省项进行说明,易产生意想不到的锁存器;三、源代码电路描述alwaysopcode or data or accumbeginifaccum==8'b00000000zero=1;elsezero=0;caseopcodePASS0: out =accum;PASS1: out =accum;ADD: out = data + accum;AND: out =data&accum;XOR: out =data^accum;PASSD: out=data;PASS6: out=accum;PASS7: out=accum;default: out=8'bx;endcaseend四、仿真结果与波形LAB 5:存储器电路的设计一、实验目的设计和测试存储器电路;二、实验原理本实验中,设计一个模块名为mem的存储器仿真模型,该存储器具有双线数据总线及异步处理功能;由于数据是双向的,所以要注意,对memory的读写在时序上要错开;三、源代码自行添加的代码assign data= readmemoryaddr:8'hZ;always posedge writebeginmemoryaddr<=data7:0;end四、仿真结果与波形LAB 6:设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别一、实验目的明确掌握阻塞赋值与非阻塞赋值的概念和区别;了解阻塞赋值的使用情况;二、实验原理在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为并发执行的;实际时序逻辑设计中,一般情况下非阻塞赋值语句被更多的使用,有时为了在同一周期实现相互关联的操作,也使用阻塞赋值语句;三、源代码`timescale 1 ns/ 100 psmodule blockingclk,a,b,c;output3:0b,c;input 3:0a;input clk;reg 3:0b,c;alwaysposedge clkbeginb =a;c =b;$display"Blocking: a=%d,b=%d,c=%d.",a,b,c;endendmodule`timescale 1 ns/ 100 psmodule non_blockingclk,a,b,c;output3:0 b,c;input3:0 a;input clk;reg 3:0b,c;always posedge clkbeginb<=a;c<=b;$display"Non_blocking:a=%d,b=%d,c=%d",a,b,c;endendmodule`timescale 1 ns/ 100 psmodule compareTop;wire 3:0 b1,c1,b2,c2;reg3:0a;reg clk;initialbeginclk=0;forever 50 clk=~clk;endinitial$dumpvars 2,compareTop;initialbegina=4'h3;$display"_______________________________";100 a =4'h7;$display"_______________________________";100 a =4'hf;$display"_______________________________";100 a =4'ha;$display"_______________________________";100 a =4'h2;$display"_______________________________";100 $display"_______________________________";$finish;endnon_blocking nonblockingclk,a,b2,c2;blocking blockingclk,a,b1,c1;endmodule四、仿真结果与波形LAB 7:利用有限状态机进行复杂时序逻辑的设计一、实验目的掌握利用有限状态机FSM实现复杂时序逻辑的方法;二、实验原理控制器是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件;CPU何时进行读指令,何时进行RAM和I/O端口的读写操作等,都由控制器来控制;三、源代码补充代码nexstate<=state+1'h01;casestate1:begin sel=1;rd=0;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end2:begin sel=1;rd=1;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end3:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end4:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 5:begin sel=0;rd=0;ld_ir=0;inc_pc=1;ld_pc=0;data_e=0;ld_ac=0;wr=0;ifopcode==`HLThalt=1;end6:beginsel=0;rd=alu_op;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end7:beginsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=alu_op;ld_ac=0;wr=0;ifopcode==`SKZinc_pc<=zero;ifopcode==`JMPld_pc=1;end0:beginsel=0;rd=alu_op;ld_ir=0;halt=0;data_e=alu_op;ld_ac=alu_op;inc_pc=opcode==`SKZ&zero||opcode==`JMP;ifopcode==`JMPld_pc=1;ifopcode==`STOwr=1;endNo.00000000 No.00000000 No.00000101 No.00000001 // 1C TEMP: //1 temporary variable00000001 // 1D time: // 1 constant 144 - max value 00000110 // 1E LIMIT: // 6 constant 1一、仿真结果与波形第二部分电路综合一、实验目的掌握逻辑综合的概念和流程,熟悉采用Design Compiler进行逻辑综合的基本方法;二、实验内容采用SYNOPSYS公司的综合工具Design Compiler对实验7的做综合;三、源代码与实验指导书中相同;四、门级电路仿真结果与波形五、思考题1.文件是verilog语言及的描述还是结构化的描述是结构化的描述;2.文件中,对触发器的延迟包括哪些信息包括对逻辑单元和管脚的上升/下降时延的最大值、最小值和典型值;第三部分版图设计一、实验目的掌握版图设计的基本概念和流程,熟悉采用Sysnopsys ICC工具进行版图设计的方法;二、实验内容对电路综合输出的门级网表进行布局布线;三、源代码与实验指导书中相同;四、仿真结果与波形布局规划后结果未产生core ring和mesh前产生core ring和mesh后电源线和电影PAD连接后filler PAD填充后布局后结果时钟树综合后结果布线后结果寄生参数的导出和后仿五、思考题1.简述ICC在design setup阶段的主要工作;创建设计库,读取网表文件并创建设计单元,提供并检查时间约束,检查时钟;在对之前的数据与信息进行读取与检查后保存设计单元;2.为什么要填充filler padfiller pad把分散的pad单元连接起来,把pad I/O区域供电连成一个整体;使它们得到持续供电并提高ESD保护能力;3.derive_pg_connection的作用是什么描述有关电源连接的信息;4.简述floorplan的主要任务;对芯片大小、输入输出单元、宏模块进行规划,对电源网络进行设计;5.简述place阶段的主要任务;对电路中的延时进行估计与分析,模拟时钟树的影响,按照时序要求,对标准化单元进行布局;6.简述CTS的主要步骤;设置时钟树公共选项;综合时钟树;重新连接扫描链;使能传播时钟;Post-CTS布局优化;优化时钟偏移;优化时序;实验总结经过数周的ASIC专业实验,我对芯片设计流程、Verilog HDL语言、Linux基本指令和Vi文本编辑器有了基本的了解;虽然之前对芯片设计、VHDL一无所知,但通过实验初步熟悉了ASIC的体系结构和VHDL的基本语法,对电路中时钟、寄生参数、元件布局带来的影响也有了了解;我在实验中也遇到了许多问题,但我在老师、助教、同学的帮助下解决了这些问题,也有了更多收获;通过这次ASIC专业实验,我加深了对本专业的认识;我会继续努力成为合格的电子人;。

verilog有限状态机实验报告范文(附源代码)

verilog有限状态机实验报告范文(附源代码)

verilog有限状态机实验报告范文(附源代码)有限状态机实验报告一、实验目的进一步学习时序逻辑电路了解有限状态机的工作原理学会使用“三段式”有限状态机设计电路掌握按键去抖动、信号取边沿等处理技巧二、实验内容用三段式有限状态机实现序列检测功能电路a)按从高位到低位逐位串行输入一个序列,输入用拨动开关实现。

b)每当检测到序列“1101”(不重叠)时,LED指示灯亮,否则灭,例如i.ii.输入:1101101101输出:0001000001c)用八段数码管显示最后输入的四个数,每输入一个数,数码管变化一次d)按键按下的瞬间将拨动开关状态锁存i.注意防抖动(按键按下瞬间可能会有多次的电平跳变)三、实验结果1.Rt_n为0时数码管显示0000,led灯不亮,rt_n拨为1,可以开始输入,将输入的开关拨到1,按下按钮,数码管示数变为0001,之后一次类推分别输入1,0,1,按下按钮后,数码管为1101,LED灯亮,再输入1,LED灯灭,之后再输入0,1(即共输入1101101使1101重叠,第二次LED灯不亮),之后单独输入1101,LED灯亮2.仿真图像刚启动时使用rt_n一段时间后其中Y代表输出,即控制led灯的信号,el表示数码管的选择信号,eg表示数码管信号四、实验分析1、实验基本结构其中状态机部分使用三段式结构:2、整体结构为:建立一下模块:Anti_dither.v输入按键信号和时钟信号,输出去除抖动的按键信号生成的脉冲信号op这一模块实现思路是利用按钮按下时会持续10m以上而上下抖动时接触时间不超过10m来给向下接触的时间计时,达到上限时间才产生输出。

Num.v输入op和序列输入信号A,时钟信号clk和复位信号,复位信号将num置零,否则若收到脉冲信号则将num左移一位并将输入存进最后一位。

输出的num即为即将在数码管上显示的值Scan.v输入时钟信号,对其降频以产生1m一次的扫描信号。

Trigger.v这一模块即为状态机模块,按三段式书写。

时序逻辑设计原理

时序逻辑设计原理

第7章时序逻辑设计原理
39
另一种商用的边沿JK触发器
74LS109
第7章时序逻辑设计原理
40
T(Toggle)触发器
T触发器:在每一个时钟脉冲的有效边沿都会
改变状态。 常用在计数器和分频器。 具有使能端的T触发器
由D触发器构成
由JK触发器构成
第7章时序逻辑设计原理
41
JK触发器 Vs D触发器
存器。
动态输入指示符
CLK 主锁存器 从锁存器
L
写入
不变
上升沿 锁存
开始写入
H
不变
写入
第7章时序逻辑设计原理
26
边沿D触发器功能特性
CLK为0的区间,QM发生变化; CLK为1后,QM的值传给Q。
第7章时序逻辑设计原理
27
边沿D触发器时间特性
传播延迟 (from CLK) 建立时间 (D before CLK) 保持时间 (D after CLK)
RS锁存器及典型操作
或非门构成的RS锁存器,有两个输入R、S,两个输出Q、QN。
S进行置位set, 使得Q输出1 R进行复位 reset,使得Q 输出0
(1)
(3)
(2)
(5) (4)
(6)
(7) (8)
(9)
(11) (10) (12)
RS正常输入
RS同时起作用
第7章时序逻辑设计原理
R和S不能同时取消, 否则会导致震荡状态或亚稳态。
史信息。
时序电路的状态个数有限:
有限状态机 状态的流转反映了电路的特性。
第7章时序逻辑设计原理
3
时序电路导读
状态变化的驱动方式:
时钟clock 有效电平:通常在时钟的触发沿内状态发生改变。 时钟周期tper、时钟频率、时钟触发沿、占空比

同步时序逻辑设计

同步时序逻辑设计

S3 LA=R; LB=Y;
/ S1 ! LA=Y ;
S2
10
红灯 1 0
S3
11
红灯1 0
绿灯0 0 黄灯0 1
S2 LA=R ;
状态编码
状态状态编码(S1:0)
S0
00
S1 0 1
S2 1 0
S3 1 1
输出编码
输出 输出编码(L1:0)
绿色
00
黄色
01
红色
10
保留
11
第四步:针对每个状态指出的输出写出输出逻辑表,并 生成“输出“的布尔表达式
输出逻辑表达式; •最后,根据下一状态逻辑和输出逻辑画出电路图
(如交通控制器)非常实用。
-下面将给大家展示:
工程系学生徘徊在实验室 和宿舍之间的学院路上,忙于 阅读他们最爱的关于有限状态 机的笔记而并不注意路上的情 况。运动员们在运动场地和食 堂之间的冒险街上推操,来回 传球,同样并没有在意周围的 情况。因此,在两条道路交叉 位置发生了极其严重的事故。
小明同学决定设计一个交 J通控制器解决此问题。
X
1
S2 1 0
X
0
S3 1 1
X
X
S0 0 0
状态编码
状态编码(S1:0
状态

1
四步:用二进制编码更新状态转换表,并生成 “下一状态"的布尔表达式
当前状态 Si
状态转移表
输入
下一状态
"下一状态”布尔表达式
S: = S[S°+ S^SQTB + S1S0
丁B
SQ = S1 S°丁人 + S i SO TB
S\ = S] e So

有限状态机(ASM)(FSM)

有限状态机(ASM)(FSM)

cout<='X';
end case; end process change_state_mode; end rtl;
when s2=>nextstate<=s3;
y<="011"; cout<='0';
二、设计一个串行数据检测器
要求:当输入连续3个或3个以上1时,
输出才为1,否则输出为0。
分析:1、逻辑抽象,得出状态转换图或状态转换表 2、根据状态转换图编写VHDL程序
BEGIN
CASE current_state IS
WHEN s0=> IF x='0' THEN
WHEN s2=> IF x='0' THEN
next_state<=s0; y<='0'; ELSE next_state<=s3;
next_state<=s0;
ELSE next_state<=s1; END IF; y<='0';
Present state Next state y2y1y0 y2y1y0
S0: 000 S1: 001 S2: 010 S3: 011 S4: 100 000 001 010 011 100 000 001
Output cout
0 0 0 0 1 0
Figure 4.2 State-assigned table
y<='0';
END IF; WHEN OTHERS=>NULL; END CASE; END process changestatemode;

第4章 时序逻辑电路

第4章 时序逻辑电路


建立时间tsetup:输入信号D在时钟边沿到达前需稳定的时间

保持时间thold :输入信号D在时钟边沿到达后需继续稳定的时间
20
2.4 D触发器

带使能端的D触发器:通过使能端EN信号来控制是否在时钟信号的触
发边沿进行数据的存储。
2选1
多路复用器
EN有效(=1) 选择外部D输入
EN无效(=0) 保持触发器当前的输出

D锁存器状态表、状态图和特征方程
状态转移表

D
Q*
0
1
0
1
D锁存器的时序图
特征方程:Q* = D(C=1)
状态图
D=1
D=0
0
1
D=1
D=0
D
C
Q
18
2.4 D触发器

由一对主、从D锁存器构成


D触发器符号
CLK

主锁存器
从锁存器
L
写入
不变
上升沿
锁存
开始写入
H
不变
写入
从锁存器只在时钟CLK的上升沿到来时采样主锁存器的输出QM的
• 输出逻辑模块G :输出函数(现态和外部输入的逻辑函数)
Mealy型:输出依赖于当前状态和当前输入信号
Moore型:输出仅依赖于当前状态,和当前输入信号无关
输出=G(现态,输入)
标准脉冲信号
属于Mealy型时序逻辑电路
6
1.2 时序逻辑电路基本结构


Moore型:输出信号仅依赖于当前状态。
输出=G(现态)


在置位态下,若R输入变为高电平,则经过两级门延迟变为复位态

有限状态机设计

有限状态机设计

ENTITY AD574 IS
PORT (
d:
IN STD_LOGIC_VECTOR(11 DOWNTO 0);
clk,status :
IN STD_LOGIC; --时钟CLK,状态信号STATUS
lock0 :
OUT STD_LOGIC; --内部锁存信号LOCK旳测试信号
cs,a0,rc,k12x8 : OUT STD_LOGIC; --AD574控制信号
决定进入下一种状态。
(if - then - else)
二、一般有限状态机旳设计
6.2.1 一般有限状态机构成
4. 辅助进程:
clk reset State_inputs
状态机 Current_state
Next_state
一般状态机工作示意图
Comb_output
二、一般有限状态机旳设计
【例 6-1 】一般两进程有限状态机描述
下一状态 输出
001
0
000
0


状态机旳表达措施2
措施二:算法流程图 措施与软件程序旳流程图类似
状态机旳表达措施3
措施三:状态转换图 条件控制
定序
状态1


/出
状态4
/出


状态3
/出
状态2
/出
Moore
直接控制 定序
状态机旳表达措施3
措施三:状态转换图 条件控制
定序
状态1
入 /出
入 /出
状态4
工作状态
禁止
禁止
开启12位转换 开启8位转换 12位并行输出有效 高8位并行输出有效 低4位加上尾随4个0有效

时序逻辑电路的状态机设计与时钟信号控制

时序逻辑电路的状态机设计与时钟信号控制

时序逻辑电路的状态机设计与时钟信号控制时序逻辑电路是一种能够根据不同的输入信号,按照一定的时序顺序产生相应的输出信号的电路。

而状态机则是一种特殊的时序逻辑电路,它能够根据当前状态和输入信号的变化来改变自身的状态,并产生相应的输出信号。

在状态机设计中,时钟信号的控制是至关重要的。

一、时序逻辑电路的基本原理时序逻辑电路是由触发器和组合逻辑门构成的。

触发器用来存储和改变电路的状态,而组合逻辑门则根据输入信号和当前的状态产生相应的输出信号。

触发器有很多种类型,如SR触发器、D触发器和JK触发器等。

它们的功能和特性各有不同,可以根据需求选择合适的触发器。

二、状态机的基本概念状态机是一种特殊的时序逻辑电路,它可以根据输入信号的变化和当前的状态来改变自身的状态,并产生相应的输出信号。

状态机由状态、输入、输出和状态转移四个部分组成。

状态表示了当前的状态,输入是指输入信号,输出是指输出信号,而状态转移则是根据输入信号和当前状态确定下一个状态的过程。

三、状态机的设计流程状态机的设计一般遵循以下几个步骤:1. 确定状态数量:首先需要确定需要多少个状态来满足设计需求。

状态数量的确定应该考虑到输入信号的变化以及输出信号的需要。

2. 状态编码:确定了状态数量后,就需要对每个状态进行编码。

状态编码可以使用二进制、格雷码或者其他编码方式。

3. 确定状态转移条件:根据输入信号和当前状态来确定下一个状态的转移条件。

可以使用真值表、卡诺图等方法进行分析和确定。

4. 绘制状态转移图:将状态数量和状态转移条件绘制成状态转移图,清晰地显示出每个状态之间的联系与转变。

5. 实现状态机:根据绘制好的状态转移图,选择合适的触发器和组合逻辑门进行设计和实现。

在设计过程中,要注意时钟信号的控制,确保状态机能够按照所需的顺序进行状态转移。

四、时钟信号对状态机的控制时钟信号是状态机中非常重要的一个因素,它用于控制状态机按照一定的时序进行状态转移。

时钟信号的频率和占空比在状态机设计中需要进行合理的选择和调整。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三利用有限状态机进行时序逻辑的设计
1.实验目的:
(1)掌握利用有限状态机实现一般时序逻辑分析的方法;
(2)掌握用Verilog编写可综合的有限状态机的标准模板;
(3)掌握用Verilog编写状态机模块的测试文件的一般方法。

(4)在数字电路中已经学习过通过建立有限状态机来进行数字逻辑的设计,而在VerilogHDL硬件描述语言中,这种设计方法得到进一步的发展。

通过Verilog HDL提供的语句,可以直观的设计出更为复杂的时序逻辑的电路。

关于有限状态机的设计方法在教材中已经作了较为详细的阐述。

2.实验环境
PC机一台,安装有quartusII13.0软件以及modulsim软件
3.实验内容
设计一个简单的状态机,功能是检测一个5位二进制序列“10010”。

考虑到序列重叠的可能。

有限状态机共提供8个状态(包括初始状态IDLE).
4.实验步骤
1)源程序:
module seqdet(x,z,clk,rst,state);
input x,clk ,rst ;
output z;
output [2:0] state ;
reg[2:0] state ;
wire z;
parameter IDLE='d0, A='d1, B='d2,
C='d3, D='d4,
E='d5, F='d6,
G='d7; assign z=(state == E && x==0)?1:0; always @(posedge clk)
if(!rst)
begin
state <= IDLE;
end
else
casex(state)
IDLE:if(x==1)
begin
state <= A;
end
A: if(x==0)
begin
state <= B;
end
B: if(x==0)
begin
state <= C;
end
else
begin
state <= F;
end
C: if(x==1)
begin
state <= D;
end
else
begin
state <= G;
end
D: if(x==0)
begin
state <= E;
end
else
begin
state <= A;
end
E: if(x==0)
begin
state <= C;
end
else
begin
state <= A;
end
F: if(x==1)
begin
state <=A;
end
else
begin
state <= B;
end
G: if(x==1)
begin
state <= F;
end
default : state = IDLE;
endcase
endmodule
测试程序:
`timescale 1ns/1ns
module seqdet_Top;
reg clk,rst;
reg[23:0] data;
wire[2:0] state;
wire z,x;
assign x=data[23];
always #10 clk = ~clk;
always @(posedge clk)
data={data[22:0],data[23]};
initial
begin
clk=0;
rst=1;
#2 rst =0;
#30 rst = 1;
data = 'b1100_1001_0000_1001_0100;
#500 $stop;
end
seqdet m(x,z,clk,rst,state);
endmodule
1)编译结果:
2)功能仿真原理图:
3)RTL原理图:
6、实验心得和体会:
通过本次简单的状态机和串行数据检测器的文本设计和仿真的实验,巩固了用软件完成Verilog语言的文本设计和仿真的基本流程。

在状态机和数据检测器的设计实验中,应用和实践有限状态机的标准模板学会了用ifelse实现较大组合逻辑电路的方法,掌握了条件语句等编程语法在简单时序模块设计中的使用以及时序逻辑分析的方法。

相关文档
最新文档