FPGA学习笔记(3)

数字进制

在 Verilog 中的数字表示方式,最常用的格式是:<位宽>‘<基数><数值>,如:4’b1011.

<位宽>描述常量所含位数的十进制整数。

<基数>基数:表示数值是多少进制。可以是 b,B,d,D,o,O,h 或者 H,分别表示二进制、十进制、 八进制和十六进制。

<数值>如果基数为b或B,则数值可以为0,1,x,X,z,Z。其中x,X代表不定态,z,Z代表高阻态。对于基数为 d 或者 D 的情况, 数值符可以是任意的十进制数:0 到 9,但是不可以为x,z。

当只有数值未定义位宽时,默认数值位宽为32位。

不定态:if(din == 4’b10x0),该条件等价于 din==4’b1000||din==4’b1010.

位宽问题

加法运算时最终的结果取决于“=”号左边信号的位宽,保存低位,丢弃高位。故使用加法运算时,其结果需要拓展位宽。

减法运算时结果有正负之分需要增加一个符号位,用补码进行运算,正数:保持不变。  负数:符号位保持不变,数值取反加1.

逻辑运算符

 

操作数多位的逻辑非,只有操作数0时,才为1. 如:assign c = !4’b0111,结果c为0.

逻辑运算符的优先级

逻辑运算符中“&&”和“||”的优先级低于算数运算符;“!”的优先级高于双目逻辑运算符。

 按位逻辑运算符

 

:在写程序时为明确个运算符之间的优先级多使用括号,多使用逻辑与,逻辑或,少使用逻辑非。

 移位运算符

 通常使用左移右移代替乘法除法运算。如:实现a*67

条件运算符

s为条件当s==00时,C=D0。以此类推

注:case 语句的缺省项必须写,防止产生锁存器。

三目运算符 

if else语句

 

选择运算符

其语法形式为vect[ a +: b ]或vect[ a -: b ]vect 为变量名字,a 为起始位置,加号或者减号代表着升序或者降序,b代表升序或降序的宽度。

例如:vect[7 +: 3]==vect[7 : 9]                vect[9 -: 4]==vect[9 : 6]

 当 cnt==0 时,将 din[7:0]赋值给 data[15:8];当 cnt==1 时将 din[7:0]赋值给 data[7:0]。 在设计的时候便可以写成:data[15-8*cnt -: 8] <= din[7 : 0].

拼接运算符

实例

 由于非定长常数的长度未知, 不允许连接非定长常数。例如:{Dbus,5} ;/ /不允许连接操作非定长常数。

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值