【芯片设计- RTL 数字逻辑设计入门 10 -- 奇偶校验实现】

文章目录

    • 奇偶校验
      • 单目运算符(|,^,&)
      • verilog code
      • verilog code
      • testbench code
    • 问题总结

奇偶校验

现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果。
在这里插入图片描述

实际上这里做的是奇偶检测,如果是奇数个 1 则结果为 1,使用单目运算符 ^ 即可。

输入描述

  • 输入信号 data_in, sel
  • 类型 wire

输出描述

  • 输出信号 q
  • 类型 wire

单目运算符(|,^,&)

假设 d = 3'b100;则:

e =& d= d[2] & d[1] & d[0];= 1'b0; 
f =^ d= d[2] ^ d[1] ^ d[0];= 1'b1

所以:

  • e =& d; ----> 可以用于检测是否为全1(是否含0)
  • f =^ d; -----> 奇偶校验
  • g =| d; -----> 检测是否全为0

verilog code

在Verilog中,^运算符作为单目运算符时的功能是"按位异或",作为双目运算符时的功能是"异或"。当data_in是一个8 bit,的数据时:
^data_in = data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[3] ^ data_in[4] ^ data_in[5] ^ data_in[6] ^ data_in[7]

简言之,就是^bus,就是检查bus中1的个数是否是成对的,如果成队,那就是为0,也就是偶校验,所以奇校验刚好取反。

此外,还会根据 sel 的值来选择 校验结果是正常输出还是取反输出。

verilog code

在这里插入图片描述

testbench code

在这里插入图片描述在这里插入图片描述

问题总结

在使用VCS 仿真是一开始出现了如下面问题:
在这里插入图片描述
从波形上可以看到数据总线上是没有数据输入的,导致了 out 信号输出的问题,所以在复位以后就需要将数据总线赋值,这里在 testbench 中是将 数据总线在复位后赋值为0,最后结果如下图:
在这里插入图片描述

sel == 1'b1

  • 当有奇数个1 时,校验结果为 1 ,例如当 data 为 7,e, 1 时(校验结果在时钟上升沿时变化);
  • 当有偶数个1 时,校验结果为 0 ,例如当 data 为 0,6 时;

sel == 1'b0 时输出结果正好相反。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/457013.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第四十五天(动态规划篇)|01背包

01背包理论基础 学习资料:代码随想录 (programmercarl.com) 相关链接:题目页面 (kamacoder.com) 背包题目分类 01背包定义 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次…

uniCloud ---- schema2code

目录 schema2code有两种方式 label属性 component属性 group属性 应用 DB Schema里有大量的信息,其实有了这些信息,前端将无需自己开发表单维护界面,uniCloud可以自动生成新增、修改、列表、详情的前端页面,以及admin端的列…

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29 《在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-6.0.0.62再使用微信3.9.5》 https://blog.csdn.net/weixin_42145772/article/details/135074804?spm1001.2014.3001.5501 按照上面文章的方法…

【iOS ARKit】人形提取

为解决人形分离和深度估计问题,ARKit 新增加了 Segmentation Buffer(人体分隔缓冲区)和Estimated Depth Data Buffer(深度估计缓冲区)两个缓冲区。人体分隔缓冲区作用类似于图形渲染管线中的 Stencil Buffer&#xff0…

挂耳耳机哪个牌子好?推荐几款性价比超高的挂耳耳机

在寻求更轻便舒适的听音体验时,挂耳耳机逐渐成为众多用户的优先选择。市场上各式各样的耳挂耳机琳琅满目,种类繁多,挂耳耳机哪个牌子好?为了帮助大家更好地了解耳挂耳机的市场状况,我推荐几款性价比超高的挂耳耳机。 挂…

《Python 网络爬虫简易速速上手小册》第7章:如何绕过反爬虫技术?(2024 最新版)

文章目录 7.1 识别和应对 CAPTCHA7.1.1 重点基础知识讲解7.1.2 重点案例:使用Tesseract OCR识别简单CAPTCHA7.1.3 拓展案例 1:使用深度学习模型识别复杂CAPTCHA7.1.4 拓展案例 2:集成第三方 CAPTCHA 解决服务 7.2 IP 轮换与代理的使用7.2.1 重…

react 之 UseMemo

useMemo 看个场景 下面我们的本来的用意是想基于count的变化计算斐波那契数列之和,但是当我们修改num状态的时候,斐波那契求和函数也会被执行,显然是一种浪费 // useMemo // 作用:在组件渲染时缓存计算的结果import { useState …

Flex 布局教程

目录 一、Flex 布局是什么? 二、基本概念 三、容器的属性 1、flex-direction属性 2、flex-wrap属性 3、flex-flow属性 4、justify-content属性 5、align-items属性 6、align-content属性 四、项目的属性 1、order属性 2、 flex-grow属性 3、flex-s…

生存类游戏《幻兽帕鲁》从部署服务器到开始体验全过程

SteamDB数据显示,《幻兽帕鲁》上线24小时内,在线人数峰值便突破200万,跻身Steam历史排行榜第二位。随着热度进一步发酵,《幻兽帕鲁》官方发布推文称,游戏发售不到6天,销量已经突破了 800万份。欢迎大家在阿…

Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音 一、介绍二、注册GVoice创建项目语音服务1.创建项目2.申请语音权限3.项目管理查看SDK初始化的一些参数和基本信息4.GVoice检测 三、SDK下载SDK是分为两种类型:独立版集成板 SDK放入Unity工程中 四、语音代码写法五、GVoice踩坑语音权限…

板块零 IDEA编译器基础:第二节 创建JAVA WEB项目与IDEA基本设置 来自【汤米尼克的JAVAEE全套教程专栏】

板块零 IDEA编译器基础:第二节 创建JAVA WEB项目与IDEA基本设置 一、创建JAVA WEB项目(1)普通项目升级成WEB项目(2)创建JAVA包 二、IDEA 开荒基本设置(1)设置字体字号自动缩放 (2&am…

高速接口PCB布局指南(四)高速差分信号布线(二)

高速接口PCB布局指南(四)高速差分信号布线(二) 1.连接器和插座2.过孔不连续性缓解3.背钻残桩4.增大过孔反焊盘的直径5.使用过孔计数相等 tips:资料主要来自网络,仅供学习使用。 1.连接器和插座 实现穿孔插…