巴克码相关器

巴克码相关器原理:巴克码相关器能够检测巴克码序列峰值,并且能够在1bits错误情况下检测巴克码序列峰值。

巴克码是20世纪50年代初R.H巴克提出的一种具有特殊规律的二进制码组。它是一个非周期序列,一个n位的巴克码(x1, x3, ... xn),每个码元只可能取值 +1或 -1 。而十一位的巴克码是11’b11100010010 。

巴克码检测器输入是一位序列,需要先移至移位寄存器中,再将移位寄存器中的值与标准巴克码同或,通过判断同或值是否大于阈值来确定巴克码。

巴克码检测器的结构图如下:

其verilog HDL设计代码如下:

1. //2018/5/5  2. //巴克码相关器设计  3. //巴克码检测器输入是1位序列,需要先移至移位寄存器中,再将移位寄存器中的值与标准巴克码同或  4. //通过判断同或值是否大于阈值来确定巴克码。  5. module buc(clk, rst, din, valid, threshold);  6.   input clk; //时钟  7.   input rst; //异步复位信号  8.   input din; //输入巴克码  9.   input[3:0] threshold; //阈值信号  10.   output valid; //当输入待检测信号满足阈值条件时,valid为1,否则为0.  11.     12.   wire[10:0] data_buc;  13.   wire[3:0] threshold;  14.     15.   //巴克码检测器模块例化  16.   buc_devider U1(.din_buc(data_buc), .threshold(threshold), .valid(valid));  17.     18.   //数据接收模块例化  19.   buc_recieve U2(.clk(clk), .rst(rst), .din(din), .dout_buc(data_buc));  20. endmodule  21.   22. //数据接收模块  23. module buc_recieve(clk, rst, din, dout_buc);  24.   input clk;  25.   input rst; //异步复位信号  26.   input din; //待检测数据输入  27.   output[10:0] dout_buc; //此模块输出,检测器模块的输入  28.   reg[10:0] dout_buc;  29.     30.   always@(posedge clk or negedge rst)  31.     if(!rst) //异步复位信号有效  32.     begin  33.       dout_buc <= 11'b0;   34.     end   35.     else //每一个时钟上升沿到达时,接收一位数据到达移位寄存器  36.     begin  37.       dout_buc <= {dout_buc[9:0],din};  38.     end  39.     40. endmodule  41.   42. //巴克码检测模块  43. module buc_devider(din_buc, threshold, valid);  44.   parameter LENGTH = 11; //序列长度  45.   parameter BUC = 11'b111_000_10010; //标准巴克码  46.   input[10:0] din_buc; //输入的待检测序列  47.   input[3:0] threshold; //阈值  48.   output valid;  //valid==1代表待检测序列满足检测要求  49.   reg valid;  50.     51.   reg[4:0] sum;  52.   integer i;  53.     54.   always@(din_buc) //每输入一位数据,din_buc变化一次,下面的语句也就执行一次  55.   begin  56.     sum = 0;  //每次敏感元素变化时,sum清零  57.     for(i = 0; i < LENGTH; i = i + 1)  58.     if(din_buc[i]^~BUC[i] == 1) //逐位检测待检测序列,若与标准巴克码一致,则sum加1,否则减1  59.       sum = sum + 1;  60.     else  61.       sum = sum - 1;            //待检测数据11位,若有1位与标准巴克码不一样,则sum等于9,2位不一样,则sum等于7,全部  62.   end                           //一致,sum等于11  63.     64.   always@(sum or threshold)     //sum和threshold成为敏感信号  65.   begin  66.     if(sum[4] == 0) //sum最大为11,用4位数据即可,此刻出现的第5位意思是若sum为负  67.     begin  68.       if(sum[3:0] >= threshold) //sum数值大于阈值,则满足要求,valid置为1  69.         valid = 1;  70.       else                   //否则valid清零  71.         valid = 0;  72.         73.     end  74.     else  75.       valid = 0;  76.             77.   end  78.       79. endmodule  

其测试文件如下:

1. //测试文件  2. `timescale 1ns/1ns;  3. module buc_tb;  4.   reg clk, rst, din;  5.   reg[3:0] threshold;  6.   reg[32:0] data; //输入数据2为33位数据,即3个待检测序列  7.     8.   initial //时钟生成,时钟周期为20ns  9.   begin  10.     clk = 1'b0;  11.     forever  12.     #10 clk = ~clk;  13.   end  14.     15.   initial  16.   begin  17.     rst = 1'b0; //异步复位信号  18.     #5 rst = 1'b1;  19.   end  20.     21.   initial  22.   begin  23.     data = 33'b11100010011_11100010001_11100010010;  24.     threshold = 4'b1001; //阈值为9,分析见buc.v  25.   end  26.     27.   integer i;  28.   always@(posedge clk or negedge rst)  29.   if(!rst)  //复位信号有效  30.       begin  31.         din = 1'b0; //输入清零  32.         i = 32; //i 赋值为32  33.       end  34.   else  35.     begin  36.       if(i == 0) //i == 0的意思是数据到最后一位,输入完成。  37.         begin  38.           din = data[i];  39.           i = 32;  40.         end  41.       else  42.         begin  43.           din = data[i]; //输入正在进行中,每个时钟上升沿到达时,移入1位数据  44.           i = i - 1;  45.         end  46.     end  47. //巴克码相关器的例化  48. buc v1(.clk(clk), .rst(rst), .din(din), .valid(valid), .threshold(threshold));  49.     50.     51. endmodule  

在Modelsim中仿真得到的波形图为:

巴克码相关器的verilog HDL设计相关推荐

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

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

  2. 序列信号产生器的verilog HDL 设计

    一.状态转移型的序列信号产生器的verilog HDL 设计 用一个不断循环的状态机,循环产生序列信号001011.过程过于简单,我就不画状态图了. 直接给出verilog HDL设计代码: //有限 ...

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

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

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

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

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

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

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

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

  7. Verilog HDL设计方法

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

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

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

  9. 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)

    目录 前言 原理 Verilog HDL程序设计 测试代码 仿真波形图 ISE综合后 RTL Schematic Technology Schematic 前言 本博文用Verilog HDL语言描述 ...

最新文章

  1. 网络爬虫-爬取微博热门话题前15个
  2. Ubuntu: 为firefox安装flash插件
  3. GPU 图像并行处理
  4. 【知识星球】数据集板块重磅发布,海量数据集介绍与下载
  5. 机器学习(十八)——关联规则挖掘
  6. button onclick 多个同名_多个按钮的OnClickListener()android
  7. string::size_type
  8. 蓝桥杯第七届决赛JAVA真题----广场舞
  9. [代码] DataGrid GridView 使用区别
  10. python---之np.prod() 函数计算数组元素乘积等
  11. 大数据-数据仓库的概念
  12. 如何使用Steam在线播放游戏
  13. 2022年(上半年)信息系统项目管理师考试-综合知识真题及解析(一)
  14. mybatipse 下载_哇塞!可以免费下载某度文档的doc格式啦
  15. 小白教你把数字翻译成字符串
  16. 【胖虎的逆向之路】Android 7.0 上Magisk配合Xposed的相关问题
  17. 如何确定自己测试结束?
  18. SWF代码分析与破解之路 (YueTai VIP视频信息获取工具) Socket续篇
  19. 数据论《西游记》关系网:猪八戒最主动喜欢别人
  20. 新型Magecart信用卡读取器能够在多个电子商务平台上窃取付款信息

热门文章

  1. python中isinstance(3、object)_Python中为什么推荐使用isinstance来进行类型判断?而不是type...
  2. pythonvbb转换txt_Caltech行人数据集转化VOC数据集
  3. java数组定义便利,java数组的定义(菜鸟教程)
  4. jgit 查看当前分支_分支 (branch)
  5. php 中文 处理,PHP处理中文字符串截取
  6. 讯飞智慧餐厅(全国赛区)比赛通知
  7. 一种电磁铁磁场分析测量
  8. 为什么单片机通常只有那么小的数据内存?
  9. 为什么使用LM386可以直接收听调频电台节目?
  10. 服务器装什么系统可以模拟器多开,安卓模拟器多开哪个最好 流畅不卡、省资源、群控刷机都有...