Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习八

Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习八

测试仿真流程

测试仿真环境为win系统下的quartus prime + modelsim
测试仿真流程参照我之前的教程
Verilog数字系统设计教程第4版夏宇闻——第三部分练习一

模块源代码

//----------seqdet.v----------
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;
//x序列10010最后一个0刚到时刻,时钟沿立刻将状态变为E,此时z应该变为高
always@(posedge clk)
	if(!rst)
		begin
			state<=IDLE;
		end
	else
		casex(state)
			IDLE:
				if(x==1)
					state<=A;
			A:
				if(x==0)
					state<=B;
			B:
				if(x==0)
					state<=C;
				else
					state<=F;
			C:
				if(x==1)
					state<=D;
				else
					state<=G;
			D:
				if(x==0)
					state<=E;
				else
					state<=A;
			E:
				if(x==0)
					state<=C;
				else
					state<=A;
			F:
				if(x==1)
					state<=A;
				else
					state<=B;
			G:
				if(x==1)
					state<=F;
			default:
				state<=IDLE;
		endcase

endmodule

测试模块代码

//----------seqdet.vt----------
`timescale 1 ns/ 1 ns

module seqdet_vlg_tst();
reg clk;
reg rst;
reg[23:0] data;                                       
wire [2:0]  state;
wire x,z;

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 i1 (
	.clk(clk),
	.rst(rst),
	.state(state),
	.x(x),
	.z(z)
);
                                                   
endmodule

结果波形

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值