一、状态转移型的序列信号产生器的verilog HDL 设计

用一个不断循环的状态机,循环产生序列信号001011。过程过于简单,我就不画状态图了。

直接给出verilog HDL设计代码:

//有限状态机方式实现001011序列信号产生器
module sequence_signal_fsm(clk, rst_n, dout);  input clk, rst_n;  output dout;  reg dout;  reg [2:0] pre_state, next_state;  parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010,  s3 = 3'b011, s4 = 3'b100, s5 = 3'b101;  always @(posedge clk or negedge rst_n)  begin  if(rst_n == 0)  pre_state <= s0;  else  pre_state <= next_state;  end  always @(pre_state)  begin  case(pre_state)  s0:  begin  dout = 1'b0;  next_state <= s1;  end  s1:  begin  dout = 1'b0;  next_state = s2;  end  s2:  begin  dout = 1'b1;  next_state = s3;  end  s3:  begin  dout = 1'b0;  next_state = s4;  end  s4:  begin  dout = 1'b1;  next_state = s5;  end  s5:  begin  dout = 1'b1;  next_state = s0;  end  default: next_state = s0;  endcase  end  endmodule

测试文件为:

`timescale 1ns/1ps
module sequence_signal_fsm_tb;reg clk, rst_n;wire dout;always#10 clk = ~clk;initialbeginclk = 1'b0;rst_n = 1'b1;#10 rst_n = 1'b0;#10 rst_n = 1'b1;endsequence_signal_fsm U1(.clk(clk), .rst_n(rst_n), .dout(dout));endmodule

在Modelsim中仿真所得波形图为:

二、移位寄存器型序列信号产生器

下面描述的是一个6位移位寄存器类型的序列信号产生器,在输入端输入任意序列,通过移位寄存器,使得输入信号的最高位移入最低位,其他各位依次向左移一位,在每个时钟上升沿到来时,将输入信号的最高位通过dout输出,从而循环产生序列信号。

下面直接给出verilog HDL设计代码:

module signal_generator_shifter_reg(clk, rst, din, dout);input clk, rst;input [5:0] din;output dout;reg dout;reg [5:0] temp;always@(posedge clk)beginif(rst == 1'b1)temp <= din;elsebegindout <= temp[5];temp <= {temp[4:0], temp[5]};endend
endmodule

测试代码为:

`timescale 1ns/1ps
module signal_generator_shifter_reg_tb;reg clk, rst;reg [5:0] din;wire dout;always#10 clk = ~clk;initialbeginclk = 1'b0;rst = 1'b0;#10 rst = 1'b1;din = 6'b001011;#20 rst = 1'b0;endsignal_generator_shifter_reg U1(.clk(clk), .rst(rst), .din(din), .dout(dout));endmodule

在Modelsim中仿真所得波形图如下:

三、计数器加组合输出网络类型

计数型序列信号发生器的结构框图如上图示:它由计数器和组合输出网络两部分组成,序列信号从组合输出网络输出。这种类型的序列信号发生器一般分两步来设计,首先根据序列的长度M设计模M计数器,计数器的状态可以自定;然后按计数器的状态转移关系和序列码的要求设计组合输出网络。由于计数器的状态设置和输出网络没有直接的关系,因此这种结构对于输出序列的更改比较方便,而且还能同时产生多组序列码。

下面描述的为计数器加组合输出网络构成的序列信号发生器,产生001011序列信号,通过内部的3位计数器进行计数,由计数状态和输出序列的对应关系,得到其输出组合逻辑真值表,从表中可以看到,Q2Q1Q0从000开始计数并不断加1,每个状态对应一个输出Z。通过真值表可以得到卡诺图,化简后可以得到输出逻辑函数为: 

Q2

Q1

Q0

Z

0

0

0

0

0

0

1

0

0

1

0

1

0

1

1

0

1

0

0

1

1

0

1

1

输出组合逻辑真值表

下面直接给出verilog HDL 设计代码:

module counter_sequence(clk, rst, dout);input clk, rst;output dout;reg [2:0] counter;always @(posedge clk)beginif(rst == 1'b1)counter <= 3'b000;else if(counter == 3'b101)counter <= 3'b000;else counter <= counter + 1'b1;endassign dout = ((~counter[0]) & counter[1]) | counter[2];
endmodule

测试文件:

module counter_sequence_tb;reg clk, rst;wire dout;always#10 clk = ~clk;initialbeginclk = 1'b0;rst = 1'b0;#10 rst = 1'b1;#20 rst = 1'b0;endcounter_sequence U1(.clk(clk), .rst(rst), .dout(dout));
endmodule

在Modelsim中仿真所得仿真图:

序列信号产生器的verilog HDL 设计相关推荐

  1. 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?

    本博文内容来源于:<从算法设计到硬件逻辑的实现>,仅供学习交流使用! 同步时序逻辑是指表示状态的寄存器组的值只可能在唯一确定的触发条件发生时刻改变.只能由时钟的正跳沿或负跳沿触发的状态机就 ...

  2. FIR滤波器设计(包括Verilog HDL设计以及MATLAB设计)

    FIR滤波器设计 滤波器原理:滤波器就是对特定的频率或者特定频率以外的频率进行消除的电路,被广泛用于通信系统和信号处理系统中.从功能角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带 ...

  3. 巴克码相关器的verilog HDL设计

    巴克码相关器 巴克码相关器原理:巴克码相关器能够检测巴克码序列峰值,并且能够在1bits错误情况下检测巴克码序列峰值. 巴克码是20世纪50年代初R.H巴克提出的一种具有特殊规律的二进制码组.它是一个 ...

  4. 移位寄存器专题(verilog HDL设计)

    目录 移位寄存器简介 分类 4位右移位寄存器工作原理 1. 16位右移位寄存器 2. 16位左移寄存器 3. 串行输入并行输出寄存器 4. 并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数 ...

  5. 【FPGA】分频电路设计(Verilog HDL设计)(良心博文)

    目录 前言 分频器分类 偶分频 奇分频 占空比为50%的奇分频 占空比不限定的奇数分频器 前言 虽然在实际工程中要产生分频时钟一般采用FPGA的时钟管理器来进行分频.倍频,通过设置一下IP核中的参数即 ...

  6. Verilog HDL设计数字跑表数码管显示

    用Verilog HDL设计数字跑表&数码管显示   用Verilog HDL设计一个数字跑表,具有复位.暂停.秒表等功能,同时为了便于显示,百分秒.秒.分钟信号均采用BCD码计数方式,并直接 ...

  7. Verilog HDL设计方法

    Verilog HDL设计方法 一.采用Verilog HDL设计复杂数字电路的优点 1.1.传统设计方法--电路原理图输入法 1.2.Verilog HDL的标准化与软核的重用 1.3.软核.固核和 ...

  8. html抢答器代码,基于FPGA的四路抢答器的Verilog HDL代码.doc

    基于FPGA的四路抢答器的Verilog HDL代码.doc module qiangda4(clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,input ...

  9. 如何用Verilog HDL设计显示译码器

    Verilog HDL 设计显示译码器 逻辑原理: 7 段数码是纯组合电路,通常的小规模专用 IC,如 74 或 4000 系列的器件只能作十进制 BCD 码译码,然而数字系统中的数据处理和运算都是 ...

最新文章

  1. c计算机中的函数,c(计算机语言)—搜狗百科
  2. 网络学习(十二)文本模式安装Red Hat Linux 9
  3. 快速定位Webclient UI 登陆business role之后timeout问题
  4. P3348-[ZJOI2016]大森林【LCT】
  5. 小程序如何实现tab切换,一部到位
  6. Android 扫描SD卡中的所有视频文件
  7. python基础小结(麻瓜图文总结版)
  8. hadoop在ubuntu上的安装流程
  9. Trustdata:《2018年Q1中国移动互联网行业发展分析报告》
  10. 30幅精美的Photoshop三维字体作品欣赏及教程
  11. Directional Light,Ambient,Specular,光照感性认识...
  12. Linux下可用的开源网络调试助手
  13. 自动化专业向往硬件方面靠,有什么好的建议?
  14. 「 神器 」极简网速监控悬浮窗软件
  15. Android 获取系统语言,区分简繁体中文
  16. flvplayer.swf flv视频播放器使用方法
  17. 深入探究js中无所不在的this
  18. H5游戏开发-面向对象编程
  19. b460m迫击炮黑苹果bios
  20. MySQL8.0导入数据

热门文章

  1. yjv是电缆还是电线_电力电缆YJV与BVV二者之间的区别是什么?
  2. java dateformat 线程安全_SimpleDateFormat线程安全问题深入解析
  3. c# poi写入e_C# 面向对象 静态类和静态成员
  4. java删除有序数组中的重复元素_java去除已排序数组中的重复元素
  5. python3.5.3安装完后什么样子_python3.5安装python3-tk详解
  6. zblog php伪静态,ZBLOG PHP版本Apache和Nginx伪静态规则以及设置方法
  7. 只要掌握这三组公式,便可以在AI学习中如鱼得水了
  8. 为什么铝基板无线接受电路板将信号源烧了?
  9. 新型超低功耗无线网卡诞生,一颗纽扣电池可撑数年
  10. java中的string函数_java中string.trim()函数的作用实例及源码