fpga学习——序列检测器11101

1.状态转移图

状态转移图

2.代码

//11101
module ex_check(
     input  wire  clk,
	 input  wire  rst,
	 input  wire  A,
	 output  reg  k
);

parameter  s1=6'b000_001;
parameter  s2=6'b000_010;
parameter  s3=6'b000_100;
parameter  s4=6'b001_000;
parameter  s5=6'b010_000;
parameter  s6=6'b100_000;

reg  [5:0]  state;

always @ (posedge clk or negedge rst)
     if(rst == 1'b0)
	   state <= s1;
	 else
	   case (state)
	     s1: if(A==1'b1)
		      state <= s2;
		     else 
              state <= s1;
         s2: if(A==1'b1)
		      state <= s3;
		     else 
              state <= s1;
         s3: if(A==1'b1)
		      state <= s4;
		     else 
              state <= s1;
         s4: if(A==1'b0)
		      state <= s5;
		     else 
              state <= s4;
         s5: if(A==1'b1)
		      state <= s6;
		     else 
              state <= s1;
         s6: state <= s1;
		 default: state <= s1;
       endcase			  

always @ (posedge clk or negedge rst)
     if(rst == 1'b0)
	   k <= 1'b0;
	 else if(state == s5 && A ==1'b1)
	   k <= 1'b1;
	 else
	   k <= 1'b0;

endmodule

3.测试代码

`timescale 1ns/1ns

module tb_ex_check;

reg  clk,rst;
reg  A;
wire  k;

initial  begin
  clk = 0;
  rst = 0;
  #100;
  rst = 1;
end

initial  begin
  rand_bit();
end

always  #10  clk <= ~clk;

ex_check  ex_check_inst(
  .clk(clk),
  .rst(rst),
  .A(A),
  .k(k)
);

task  rand_bit();
  integer  i;
  begin
    for(i=0;i<255;i=i+1)
	  begin
	    @(posedge clk)
		  A <= {$random} % 2;  //产生0、1的随机数,$random % 2是产生-2到1的随机数
	  end
  end
endtask

endmodule

4.自动化仿真文件

quit -sim
.main clear

vlib ./lib
vlib ./lib/work_a/
vlib ./lib/design
vmap base_space ./lib/work_a/
vmap design ./lib/design/

vlog -work base_space ./tb_ex_check.v
vlog -work ./../design/*.vlib

#-t 运行仿真的时间精度是ns
#-L 是链接库关键字
vsim -t ns -voptargs=+acc -L base_space -L design base_space.tb_ex_check

#创建虚拟信号,枚举
virtual  type  {
{01  s1}
{02  s2}
{04  s3}
{08  s4}
{10  s5}
{20  s6}
}  vir_new_singal

add wave -divider {tb_ex_check}
add wave tb_ex_check/*
add wave -divider {ex_check}
#顶层/例化的名字,/*中*是通配符,匹配所有信号
add wave tb_ex_check/ex_check_inst/*

#创建一个vir_new_singal类型的信号,也就是把state进行类型转换
virtual  function  {(vir_new_singal)tb_ex_check/ex_check_inst/state}  new_state
add  wave  -color  red  tb_ex_check/ex_check_inst/new_state

run 1us

5.仿真结果

结果图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程设计任务书 学生姓名 胡俊 学生专业班级 计 算 机0801 指导教师 王莹 学 院 名 称 计算机科学与技术学院 一、题目:“1 1 1”序列检测器。 原始条件:使用D触发器( 74 LS 74 )、“与”门 ( 74 LS 08 )、“或”门( 74 LS 32 )、非门 ( 74 LS 04 ),设计“1 1 1”序列检测器。 二、要求完成设计的主要任务如下: 1.能够运用数字逻辑的理论和方法,把时序逻辑电路设计和组合逻辑电路设计相结合,设计一个有实际应用的数字逻辑电路。 2.使用同步时序逻辑电路的设计方法,设计“1 1 1”序列检测器。写出设计中的5个过程。画出课程设计图。 3.根据74 LS 74、74 LS 08、74 LS 32、74 LS 04集成电路引脚号,在设计好的“1 1 1”序列检测器电路图中标上引脚号。 4.在试验设备上,使用74 LS 74、74 LS 08、74 LS 32、74 LS 04集成电路连接、调试和测试“1 1 1”序列检测器电路。 三、实验设计过程: 第1步,画出原始状态图和状态表。 根据任务书要求,设计的序列检测器有一个外部输入x和一个外部输出Z。输入和输出的逻辑关系为:当外部输入x第一个为“1”,外部输出Z为“0”;当外部输入x第二个为“1”,外部输出Z为“0”;当外部输入x第三个为“1”,外部输出Z才为“1”。假定有一个外部输入x序列以及外部输出Z为: 输入x: 0 1 0 1 1 1 0 1 1 1 1 0 1 输出Z: 0 0 0 0 0 1 0 0 0 1 1 0 0 要判别序列检测器是否连续接收了“111”,电路必须用不同的状态记载外部输入x的值。假设电路的初始状态为A,x输入第一个“1”,检测器状态由A装换到B,用状态B记载检测器接受了111序列的第一个“1”,这时外部输出Z=0;x输入第二个“1”,检测器状态由B装换到C,用状态C记载检测器接受了111序列的第二个“1”,外部输出Z=0;x输入第三个“1”,检测器状态由C装换到D,外部输出Z=1。然后再根据外部输入及其他情况时的状态转移,写出相应的输出。以上分析了序列检测器工作,由此可画出图7-1所示的原始状态图。根据原始状态图可列出原始状态表,如表7-2所示。
一、实验目的: 1、深入了解与掌握同步时序逻辑电路的设计过程; 2、了解74LS74、74LS08、74LS32及74LS04芯片的功能; 3、能够根据电路图连接好实物图,并实现其功能。学会设计过程中的检验与完善。 二、实验内容描述: 题目:“1 1 1”序列检测器。 原始条件:使用D触发器( 74 LS 74 )、“与”门 ( 74 LS 08 )、“或”门( 74 LS 32 )、非门 ( 74 LS 04 ),设计“1 1 1”序列检测器。 集成电路引脚图: D触发器( 74 LS 74 ) “与”门 ( 74 LS 08 ) “或........ 三、实验设计过程: 第1步,画出原始状态图和状态表。 根据任务书要求,设计的序列检测器有一个外部输入x和一个外部输出Z。输入和输出的逻辑关系为:当外部输入x第一个为“1”,外部输出Z为“0”;当外部输入x第二个为“1”,外部输出Z为“0”;当外部输入x第三个为“1”,外部输出Z才为“1”。假定有一个外部输入x序列以及外部输出Z为: 输入x: 0 1 0 1 1 1 0 1 1 1 1 0 1 输出Z: 0 0 0 0 0 1 0 0 0 1 1 0 0 要判别序列检测器是否连续接收了“111”,电路必须用不同的状态记载外部输入x的值。假设电路的初始状态为A,x输入第一个“1”,检测器状态由A装换到B,用状态B记载检测器接受了111序列的第一个“1”,这时外部输出Z=0;x输入第二个“1”,检测器状态由B装换到C,用状态C记载检测器接受了111序列的第二个“1”,外部输出Z=0;x输入第三个“1”,检测器状态由C装换到D,外部输出Z=1。然后再根据外部输入及其他情况时的状态转移,写出相应的输出。以上分析了序列检测器工作,由此可画出图7-1所示的原始状态图。根据原始状态图可列出原始状态表,如表7-2所示。 现态 次态/输出 x = 0 x = 1 A A / 0 B / 0 B A / 0 C / 0 C A / 0 D / 1 D A / 0 D / 1 (表 7-2 原始状态表) (图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值