一、使用工具
Quartus 18.1
二、要求
1、根据以下描述功能用verilog编写一段代码, 并用状态机来实现该功能。
(1)状态机:实现一个测试过程,该过程包括启动准备状态、启动测试、停止测试、查询测试结果、显示测试结果、测试结束返回初始化6个状态;用时间来控制该过程,90秒内完成该过程;
(2)描述状态跳转时间;
(3)编码实现。
2. 画出可以检测10010串的状态图, 并用verilog编程实现之。
三、需求分析
对于第一个要求,是实现六个状态,并且用时间来控制这个过程,说简单一点,就是根据时间切换六个状态
对于第二个要求,需要检测10010的数据串,只有当10010依次输入时,才能通过检测,而实现这个功能,可以通过按键来模拟0和1的值,并且使用6个状态,只有当输入的值正确之后,才能进入下一个状态,不然就会回到出事状态

四、时序切换
- 状态切换代码
module six_state (//90s内六个状态切换
input wire clk, //时钟,50M
input wire rst_n, //复位信号
output wire [3:0] led //1s脉冲信号
);
//6个切换状态
parameter s1= 1;
parameter s2= 2;
parameter s3= 3;
parameter s4= 4;
parameter s5= 5;
parameter s6= 6;
//切换时间状态为1s
parameter MAX_NUM=26'd50_000_000;
reg [3:0] led_r;
reg [2:0] cstate;//现在的状态
reg [25:0] cnt;
//计数模块
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
cnt <= 26'd0;
else if (cnt == MAX_NUM)
cnt <= 26'd0;
else
cnt <= cnt + 1'd1;
end
//状态切换模块
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
cstate <= 3'b0;
else if (cnt == MAX_NUM) begin
if (cstate == 3'd6) begin
cstate <= 3'b0;
end else begin
cstate <= cstate + 1'b1;
end
end
else
cstate <= cstate ;
end
//状态输出模块
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
led_r <= 4'b0

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



