HDLBits 系列(3)Priority Encoder(Case/Casez)
目录
抛砖引玉
使用CASEZ来解决
写在最后
抛砖引玉
优先级编码器是一种组合电路,当给定输入位向量时,输出该向量中第一个1位的位置。 例如,给定输入8'b10010000的8位优先级编码器将输出3'd4,因为bit [4]是高的第一位。
构建一个4位优先级编码器。 对于此问题,如果所有输入位都不为高(即输入为零),则输出零。 请注意,一个4位数字具有16种可能的组合。
如何设计这样的一个优先编码器,我们首先应该能够想到的是使用语法case,然后也很容易惯性思维,列出每一种情况,然后对应的输出是多少?
例如:
//伪代码
case(input)
4'b0001: output = 1;
.......
4'b1111:output = 1;
default: output = 0;
endcase
如果真是这样写的话, 那么8位优先编码器?更多位的优先编码器呢?那组合岂不多了去了,像本人师弟说的,感觉这样做很傻?哈哈,确实如此,有更简单的方法,思维要灵活,我们这里既不用casex也不用casez,也能把这个优先编码器安排的稳稳当当。
// synthesis verilog_input_version verilog_2001
module top_module (input [3:0] in,output reg [1:0] pos );always@(*) begincase(1)in[0]: pos = 0;in[1]: pos = 1;in[2]: pos = 2;in[3]: pos = 3;default: pos = 0;endcaseendendmodule
这样的话,N位编码器都只需要N个case分支即可。
代入到HDLBits验证:
使用CASEZ来解决
为8位输入构建优先级编码器。 给定一个8位向量,输出应报告向量中的第一位,即1。如果输入向量没有高位,则报告为零。 例如,输入8'b10010000应该输出3'd4,因为bit [4]是高的第一位。
根据上一个练习(always_case2),case语句中将有256个案例。 如果case语句中支持的case项目无关紧要,我们可以减少这种情况(减少到9个case)。 这就是casez的目的:在比较中,将值z的位视为无关位。
例如,这将实现上一个练习中的4输入优先级编码器:
always @(*) begincasez (in[3:0])4'bzzz1: out = 0; // in[3:1] can be anything4'bzz1z: out = 1;4'bz1zz: out = 2;4'b1zzz: out = 3;default: out = 0;endcase end
一个case语句的行为就好像每个项目都被顺序检查一样(实际上,它的作用更像是生成一个巨大的真值表,然后进行门操作)。 请注意,如何有某些输入(例如4'b1111)可以匹配多个案例项目。 选择第一个匹配项(因此4'b1111匹配第一个项,out = 0,但不匹配任何后续项)。
- 还有一个类似的casex,将x和z都视为无关位。 我认为在casez上使用它的目的不大。
- 符号? 是z的同义词。 所以2'bz0与2'b?0相同
8位的优先编码器可以如下设计:
// synthesis verilog_input_version verilog_2001
module top_module (input [7:0] in,output reg [2:0] pos );always@(*) begincasez(in)8'bzzzz_zzz1: pos = 0;8'bzzzz_zz1z: pos = 1;8'bzzzz_z1zz: pos = 2;8'bzzzz_1zzz: pos = 3;8'bzzz1_zzzz: pos = 4;8'bzz1z_zzzz: pos = 5;8'bz1zz_zzzz: pos = 6;8'b1zzz_zzzz: pos = 7;default: pos = 0;endcaseendendmodule
代入HDLBits:
写在最后
最后说一句,上述优先编码器都可以使用如下方式来写,且甚至复杂度更低:
// synthesis verilog_input_version verilog_2001
module top_module (input [7:0] in,output reg [2:0] pos );always@(*) begincasez(1)in[0]: pos = 0;in[1]: pos = 1;in[2]: pos = 2;in[3]: pos = 3;in[4]: pos = 4;in[5]: pos = 5;in[6]: pos = 6;in[7]: pos = 7;default: pos = 0;endcaseendendmodule
HDLBits 系列(3)Priority Encoder(Case/Casez)相关推荐
- 【verilog学习12】HDLBits:Procedures (Always block/case+Avoiding latches)
[HDLBits]Procedures I. Always blocks(combinational) 1.代码编写 2.提交结果 3.题目分析 II. Always blocks(clocked) ...
- HDLBits 系列(0)专题目录
本篇博文是近来总结HDLBits系列的目录,点击蓝色字体即可进入查看具体内容. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行 HDLBits 系列(2)如何避免生成锁存器? ...
- 优先编码器 Priority Encoder
优先编码器(Priority Encoder,PENC)用于判断数据最高位1出现的位置. 以 4-2优先编码器(PENC)为例,其真值表为: D3 D2 D1 D0 Q1 Q2 Vld 0 0 0 1 ...
- HDLBits 系列(31)Serial Receiver and Datapath
目录 序言 原题复现 我的设计 序言 上篇博文: HDLBits 系列(30)Serial Receiver 写了串行接收器如何接收8位串行数据,正确接收8位串行数据后给一个接收完毕标志信号,这篇博文 ...
- HDLBits 系列(29)PS/2 mouse protocol(PS/2 packet parser and datapath)
目录 序言 原题传送 题目解释 我的设计 序言 上篇博客: HDLBits 系列(28)PS/2 mouse protocol(PS/2 packet parser) 只对PS/2 mouse pro ...
- 【 Verilog HDL 】case, casez, casex 之干货总结
这几天在做一个无人机定位的项目,时间比较紧,自己也不太懂,所以就边忙别愁就没有了精力写博客了.可是想想这样也不好,还是抽出点时间写博客,即使写的比较简单也行,至少能解答自己的疑惑就够了. Verilo ...
- [UML]UML系列——用例图Use Case
原文:[UML]UML系列--用例图Use Case 用例图的概念 用例图是描述用例.参与者以及它们之间关系的图. 用例图的作用 用例图是从用户的角度来描述对信息系统的需求,分析产品的功能和行为. 用 ...
- (67)FPGA面试题-为priority encoder编写Verilog代码,实现MUX4_1
1.1 FPGA面试题-为priority encoder编写Verilog代码,实现MUX4_1 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-为pr ...
- case/casez/casex 的区分与使用
参考:http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html 与 verilog数字系统设计基础 一般来说,使用最多的是CA ...
- case/casez/casex 区别与综合
首先,一般性的常识是使用casez,强烈的建议不要使用casex,(虽然我没有这个常识).这是为啥呢?待续. 首先要明确的是'?'代表的不是don't care,而是'z'.这点一定要明确. 再有就是 ...
最新文章
- ASP.NET运行原理
- Inside C++ object Model--构造函数
- 你现在的CSS水平处于什么等级?
- C++运算符重载(成员函数方式)
- 【每周CV论文推荐】 初学GAN必须要读的文章
- python挖坑法实现快排
- db2 replace函数的用法_SQL基础知识:常用字符处理函数
- linux fedora35设置双系统开机启动顺序
- JAVA月数输入24回车后变成12_Java语言程序设计(一)自考2012年10月真题
- 消费者驱动的微服务契约测试套件Spring Cloud Contract
- Vue.js - Day2
- navicat的字符集和排序规则
- jdbc链接mysql按照id查询_使用jdbc连接并操作Oracle数据库(增删改查IDUS)
- 有关计算机编程论文,有关计算机程序的论文范文
- ubuntu lvs keepalived mysql_ubuntu下LVS + Keepalived 实现mysql高可用负载均衡实现
- CSS Flex-box示例代码
- 32款 jQuery UI框架开源软件
- oracle增加字段为主键自增_Oracle新增自增一的主键字段和赋值代码
- 某地环境空气质量分析(1)
- mac 上查看字体文件的路径
热门文章
- 30天python开发_30天解锁Python量化开发——初探交易接口
- logback的使用和logback.xml详解
- java 日期的加减_用java实现日期类的加减
- java锁的有哪些_「并发编程」Java锁分类和特点有哪些
- linux进程莫名其妙被kill,Linux进程突然被杀掉(OOM killer),查看系统日志
- java round number,Java Number Math 类
- matlab怎么调用DeepLearn,使用DeepLearnToolbox-master中DBN工具箱做数据分类出现问题,求......
- 如何用C语音实现传递函数?
- 深度跑车 - DeepRacer
- 三星android功能怎么用,三星GALAXY S II升级Android 4.0新功能介绍及使用技巧