我是靠谱客的博主 现实白开水,最近开发中收集的这篇文章主要介绍【Verilog向SystemVerilog过渡遇到的问题】~ 信号变量类型的转变、 == 和 ===的区别、array[$]、奇偶校验位、repeat、数据选择语句、1. 信号变量类型的转变(reg、wire ===> logic)2. 关于 == 和 === , != 和 !== 的区别3. 关于 array[$] 表示的意思?4. 按位取反~ 和 逻辑取反!5. 奇偶校验位6. repeat7. 数据选择语句var[a +: b]或var[a -: b]8. SV和verilog的区别8.,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本章目录:

  • 1. 信号变量类型的转变(reg、wire ===> logic)
  • 2. 关于 == 和 === , != 和 !== 的区别
  • 3. 关于 array[$] 表示的意思?
  • 4. 按位取反~ 和 逻辑取反!
    • 4.1 概述
  • 5. 奇偶校验位
    • 5.1 概述
    • 5.2 奇校验
    • 5.3 偶校验
    • 5.4 真题练习
  • 6. repeat
    • 6.1 用法1
    • 6.2 用法2
  • 7. 数据选择语句var[a +: b]或var[a -: b]
    • 7.1 举例说明
  • 8. SV和verilog的区别
  • 8. 二进制位转换
  • 声明

1. 信号变量类型的转变(reg、wire ===> logic)

很多刚开始学习SV的朋友不理解 为什么 Verilog 中的reg和wire直接可以改成logic运行,确实如此,这是不会有任何编译错误的。但是,随着学习的深入,我觉得有必要理清楚他们的关系。

区别如下:

  1. reg 或者 wire 它是 类型;而我们的logic是 数据类型;不能相提并论,我们的logic可以和bit相提并论。
  2. reg原本的作用是储存数据,对应于SV中的var logic,SV默认就是var型的,所以这就是一般我们不去写出var,而直接写logic的原因;wire就相当于一根线连接就完事了,在SV中我们可以写成wire logic。
  3. 在SV当中,如果我们用于驱动数据的时候,用logic(var logic)就行;如果我们是用于监测数据的时候,我们一般是用wire logic,虽然此时也可以用logic,这就看我们怎么理解了,监测也可以理解成将被监测的数据保存下来。这就因人而异了。

2. 关于 == 和 === , != 和 !== 的区别

== 和 != :这两种表示逻辑符合与逻辑不符合。只能比较’0’和’1’;如若其中存在有x或者z,那么得到的结果 则是z。
=== 和 !== : 表示全等符号,可以比较x和z,严格匹配x与z,但此条语句不可综合。

代码举例:点击查看

3. 关于 array[$] 表示的意思?

今天在看代码的时候,看到了array[$],也就是数组内部没有索引,而是这样一个美元 $ 符号,表示的意思是 数组的最后一个元素

4. 按位取反~ 和 逻辑取反!

4.1 概述

按位取反的意思是 每一位都需要把它取相反的逻辑,比如 reg [7:0] out = 11110000,那么按位取反就是~out = 00001111,此时如果要用if语句判断的话,if(~out),除了out = 00000000时,执行if里边的语句,其他情况都不执行。

逻辑取反的意思是 只要是0,!之后就是1,不管什么情况,只有0或1两种情况。

5. 奇偶校验位

5.1 概述

对数据传输正确性的一种校验方法。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。奇偶校验能检测出传输数据的部分错误(1位误码能检测出,2位及2位以上检测不出来),而且不能纠错,在发现错误后,只能要求重发。由于简单所以被广泛应用。每个字节发送九位(8位+1位校验位)数据。1个字节(byte)=8位(bit)。

5.2 奇校验

在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算1的个数为奇数还是偶数(注意这里仅仅检测1的个数即可),“110011100"中仍然含有5个"1”,奇数个1,则为"0",与发送方一致,表示在此次传输过程中未发生错误。

5.3 偶校验

在数据传输前附加一位偶校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"1",否则置为"0",用以保持数据的奇偶性不变。例如,需要传输"1100110",数据中含4个"1",所以其偶校验位为"0",同时把"11001100"传输给接收方,接收方收到数据后再一次计算1的个数为奇数还是偶数(注意这里仅仅检测1的个数即可),“11001100"中含有4个"1”,偶数个1,则为"0",与发送方一致,表示在此次传输过程中未发生错误。

5.4 真题练习

请移步到我的刷题专栏,传送门

6. repeat

6.1 用法1

repeat(10)begin
...//执行10次
end

6.2 用法2

repeat(10)@(posedge clk);//延迟10个时钟周期
a=b;
//或者直接写成:
a=repeat(10)@(posedge clk) b ;

7. 数据选择语句var[a +: b]或var[a -: b]

其中,var是变量名字,a表示起始位置,b表示数据的个数(位宽),+表示升序,-表示降序。

7.1 举例说明

var[2+:3]表示从第二位开始,升序数3个位的数据,也就是说,它表示var[2:4]。
降序的话同理。

8. SV和verilog的区别

system verilog可以看做是verilog一个升级版本,但是主要是验证相关的升级。具体来说只要是下面几点:

  1. 相比于Verilog,SV从C中继承了一些方便的语法。

  2. 局部数据存储 automatic
    动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式,包括堆区、栈区。
    静态存储方式是指在程序编译期间分配固定的存储空间的方式。

  3. 时间、精度
    可以在每个模块中指明时间参数。

8. 二进制位转换

1B(Byte)=一个字节=一个存储单元=8位二进制
1KB=2^10B
1MB=2^20B
1GB=2^30B
1TB=2^40B

因此,你比如要计算4GB有多少位?
4GB = 4 x 2^30 x 8 位二进制

==============================================================================

声明

本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!

本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!

如果觉得对你有用的话,记得收藏+评论!!!

如果大家还想继续看我的文章和笔试面试合集,麻烦大家关注一下我的
微信公众号,名字叫“IC二舅”,会有很多资料和各种合集都可以看得到,谢谢大家!!!

持续更新中…

最后

以上就是现实白开水为你收集整理的【Verilog向SystemVerilog过渡遇到的问题】~ 信号变量类型的转变、 == 和 ===的区别、array[$]、奇偶校验位、repeat、数据选择语句、1. 信号变量类型的转变(reg、wire ===> logic)2. 关于 == 和 === , != 和 !== 的区别3. 关于 array[$] 表示的意思?4. 按位取反~ 和 逻辑取反!5. 奇偶校验位6. repeat7. 数据选择语句var[a +: b]或var[a -: b]8. SV和verilog的区别8.的全部内容,希望文章能够帮你解决【Verilog向SystemVerilog过渡遇到的问题】~ 信号变量类型的转变、 == 和 ===的区别、array[$]、奇偶校验位、repeat、数据选择语句、1. 信号变量类型的转变(reg、wire ===> logic)2. 关于 == 和 === , != 和 !== 的区别3. 关于 array[$] 表示的意思?4. 按位取反~ 和 逻辑取反!5. 奇偶校验位6. repeat7. 数据选择语句var[a +: b]或var[a -: b]8. SV和verilog的区别8.所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部