本人持续更新HDLBits其他题目,详细讲解我们使用Verilog编程时会遇到的各种错误,若有兴趣可以移步我的博客中心浏览本人的其他文章,感谢赏光!

A Bit of Practice
One common place to see a replication operator is when sign-extending a smaller number to a larger one, while preserving its signed value. This is done by replicating the sign bit (the most significant bit) of the smaller number to the left. For example, sign-extending 4’b0101 (5) to 8 bits results in 8’b00000101 (5), while sign-extending 4’b1101 (-3) to 8 bits results in 8’b11111101 (-3).

Build a circuit that sign-extends an 8-bit number to 32 bits. This requires a concatenation of 24 copies of the sign bit (i.e., replicate bit[7] 24 times) followed by the 8-bit number itself.

本道题目的意思就是扩展位
正确解答

module top_module (input [7:0] in,output [31:0] out );assign out = { {24{in[7]} },in[7:0] };endmodule

在看错误解答前先看下面这段话
1、{ }表示拼接,{第一位,第二位…};
2、{{ }}表示复制,{4{a}}等同于{a,a,a,a};
所以{24{1‘b1}}就表示将24个1拼接起来,即24’b111111111111111111111111。

注意正确答案assign out = { {24{in[7]} },in[7:0] }; 和两个错误答案assign out = { 24{in[7]} ,in[7:0] }; assign out = { {24in[7] },in[7:0] }; 的中括号的使用

以下是两种典型的错误
1、

module top_module (input [7:0] in,output [31:0] out );assign out = { 24{in[7]} ,in[7:0] };endmodule

这里的{in[7]}是没有任何意义的,本来一个中括号对{}表示拼接的意思,但是这里in[7]只有它自己,所以拼接了个寂寞。
2、

module top_module (input [7:0] in,output [31:0] out );assign out = { {24in[7] },in[7:0] };endmodule

这里的{24in[7]}也表示拼接,但是这个24in[7]完全是一个错误的东西。

注意:

位扩展是一种非常有用的东西,尤其是在FPGA中,很多时候我们进行一些乘法加法运算会因为寄存器的位数不够而导致“高位截瘫”,这个时候我们就需要合理的对寄存器进行位扩展,位扩展有些是单纯的补0,而有些是补符号位,这要根据自己的场景来补。总而言之位扩展非常重要,希望各位朋友能万分重视,时刻注意自己运算的数是否会溢出而造成结果不准!

HDLBits——Replication operator位扩展 (非常有用的一道题目)相关推荐

  1. 字扩展,位扩展,和字位扩展_6个有用的LibreOffice扩展

    字扩展,位扩展,和字位扩展 LibreOffice是周围最好的免费办公套件,因此,所有主要的Linux发行版都采用了LibreOffice. 尽管LibreOffice已经包含了功能,但是可以使用称为 ...

  2. 字扩展,位扩展,和字位扩展_价格合理,可扩展的网站简介

    字扩展,位扩展,和字位扩展 One morning you wake up, grab some coffee, and check the how many people visited your ...

  3. 符号位处理方式 c语言,C语言位域解析符号位扩展规则

    从一个例子说起: int main(void){ union{ int i; struct{ char a : ; char b : ; char c : ; }bits; }num; printf( ...

  4. 有符号数据的符号位扩展

    简介: 在写传感器驱动程序的时候经常会遇到输出数据位数在8到16位之间.这样,在调试的时候如果使用printf直接输出数据,有可能出现错误.因为printf在打印的时候会做数据类型判断.所以我们需要对 ...

  5. 简单剖析C语言中的位扩展问题

    在C语言中,数据类型的字节数是不同的.不同的数据类型,二进制的位数也会不同.比如char类型的数据,它的大小是1个字节,二进制位数为8位,int类型的数据是4个字节,那么二进制位数就是32位. 当不同 ...

  6. Verilog功能模块——符号位扩展

    一. 模块功能与应用场景 模块功能:符号位扩展 应用场景:DDR等存储器通常是32/64位的,数据需要转为合适的位数再存入. 二. 模块框图与使用说明 输入和输出都是二进制补码,补码的符号位扩展就是补 ...

  7. 零位扩展和符号位扩展

    1.符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1:对于正数而言,符号扩展和零扩展是一 ...

  8. 计组—存储以及字、位扩展

    存储器的分类 存储器的功能: 存储器是计算机系统中的记忆设备,用来存放程序(指令)和数据(二进制代码形式存放). 存储器中最小单位就是存储元,可以存储一个二进制代码(0或1),即1个 bit (1)构 ...

  9. 哪位大兄弟有用 cMake 开发Android ndk的

    一直用 Android studio 开发ndk,但是gradle支持的不是很好,只有experimental 版本支持 配置各种蛋疼.主要每次新建一个module都要修改配置半天. 之前也看到过go ...

最新文章

  1. 【工业智能】人工智能真的无所不能吗?
  2. 【UVA624 01背包中的路径问题】
  3. jzoj3236-矮人排队【权值线段树】
  4. 语言4位bcd码怎么加加_S7300400如何使用SCL语言调用SFC1(READ_CLK)读取日期和时间?...
  5. android 菜单 功能键,Android交互体验必知:功能按键事件
  6. 汇编语言-子程序调用
  7. 数据科学 IPython 笔记本 7.3 Pandas 数据操作
  8. 从 Wi-Fi 6 的到来,看家庭网络的优化之路!
  9. 02(d)多元无约束优化问题-拟牛顿法
  10. Oracle数据库to_date()和to_char()的相关
  11. 封装0603和0805的区别
  12. Yocto on Quark X1000
  13. 什么是UL2809认证?
  14. 实现CS客户端服务器模型(Linux系统)
  15. 求助--报错:Caused by: java.lang.ClassCastException: org.apache.ibatis.type.InstantTypeHandler cannot be
  16. java 狗带风波_狗狗风波
  17. 3款Android版epub阅读器推荐
  18. 网易云音乐怎么设置黑胶唱片_黑胶唱片是否是开放音乐格式?
  19. SVN 如何把一个项目的版本回退到指定版本?
  20. 怎样设计一个管理系统

热门文章

  1. 潜望丨蔚来发布了喜忧参半的财报 与特斯拉的较量刚刚开始
  2. Python-小实战-1.0
  3. ul、li 标签实现完美表格
  4. CAD高版本窗体阵列LISP_如何把CAD高版本阵列对话框在低版本调出来?
  5. VSCode的常用快捷键
  6. 面向初学者的 MQL4 语言系列之4——自定义指标
  7. sw2014计算机配置,solidworks配置要求高吗,solidworks需要什么样的电脑配置
  8. 【转】经典的劝酒令和挡酒词
  9. 简单介绍一下web开发中用到的一些技术
  10. view.post到底是干嘛的