- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
序列检测器设计-modelsim-verilog-实验报告.
实验四-序列检测
一、实验目的1.实验目的:通过学习,一般逻辑分析的方法。
使用Verilog语言编写实现序列检测
3.学会使用Verilog编写tbech的方法并Modelsim中实现时序仿真。
、实验设备
PC机一台
Modelsim软件
、实验内容检测器能够与从二进制码流中检测出一组特定序列的信号的时序电路通过的序列号与检测其预设值比较,检测到输入信号匹配时,输出的指示。
序列检测器要求能够“10010”。din为数字码流的输入,检测标记的输出,高电平表示发现指定序列,低电平没有发的序列。
检测“10010”时序输入与输出示例如下:
T 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 … x 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 … z 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 … Table 1 - 序列检测示例
1.打开Modelsim软件目录至位置,这里选择D,在D下一保存有检测文件seqdet.v测试文件,源程序在附录里
2.然后新建工程-Project,建立工程为seqdet如下并在接下来的步骤中添加检测文件seqdet.v测试文件
4.编译文件
编译无误后仿真
5.文件仿真
在弹出的窗口中选择-work-seqdet_tb,默认选中优化选项。OK
6.添加信号wave视图中。下,切换到窗口object视图下,信号Tclk,rst,x,z,q到wave窗口中,
后如图所示:
7.运行仿真ns,波形图显示如图所示:
分析:上述图形分析如下
当rst信号为高电平时,输入使能,的为x:0001_1001_0010_0001_0010_1000用蓝色表示的为第一次检测到“10010”,黄色表示为第二次序列,紫色表示为第三次匹配序列。z在这三处时,其他为低电平,实现了检测的功能
四,程序
①源程序模块seqdet.v :
module seqdet
(
input wire x, //信号输入
input wire clk, //时钟信号
input wire rst,
output wire z,
output reg [4:0] q //序列输出
);
wire [4:0] q_next;
assign q_next ={q[3:0],x};
assign z = (q_next== 5b10010) ? 1b1:1b0;
always @ (posedge clk,negedge rst)
if(!rst)
q = 5d0;
else
q = q_next;
endmodule
②测试程序seqdet_tb.v
`timescale 1ns/1ns
module seqdet_tb;
localparam T =20;
reg clk,rst;
reg [23:0] data;
wire z,x;
wire [4:0] q;
assign x = data[23];
initial
begin
clk =0;
rst =1;
#2 rst =0;
#30 rst =1;
data =20b1100_1001_0000_1001_0100;
#(T*1000) $stop;
end
always #T clk = ~clk;
always @ (posedge clk)
#2 data = {data[22:0],data[23]};
seqdet U1
(
.x(x),
.z(z),
.clk(clk),
.q(q),
.rst(rst)
);
endmodule
五、总结:
本次实验,对Verilog硬件描述语言有了进一步,编写的文本设计方法,学会testbench测试程序初步掌握使用Modelsim软件调试的方法。移位寄存器进行序列检测,使用状态机,便于拓展
文档评论(0)