System Verilog学习笔记(一)

1.var/reg与bit/logic

异:
reg——>在verilog hdl中用来声明寄存器;
var——>在SV中所有暂存的资源视为变量,即variable;
同:
reg和var都会消耗FPGA资源。
注:
a.SV中保留了reg关键字,reg与var有等价左右。
b.SV在声明RAM的时候,也会使用var关键字。
例子:
reg [3:0] rLED; //verilog
var [3:0] rLED; //sysverilog

2、物理特性寄存器一般有4态,即0,1,x,z
verilog hdl——>reg关键字默认下都视为4态
SV——>资源暂存为2态,关键字是bit,即0和1;
资源暂存为4态,关键字是logic,即0,1,x,z
(z——>用来驱动IO口,主要是阻隔输出;x——>用来建立选择器)
例子:
var bit [3:0] rLED; //sysverilog,2态的暂存资源
var logic [3:0] rLED; //sysverilog,4态的暂存资源

注:如果驱动对象是IO就选择logic,如果是暂存数据就选bit

3、always_ff与always_comb
在verilog中,有时间点事件和即时事件,分别对应时序逻辑和组合逻辑,声明分别为always@(沿敏感列表) 和 always@(*)
system verilog中,则分别用always_ff(沿敏感列表) 和 always_comb表示时序逻辑和组合逻辑;

例子:
always@(posedge CLK) //verilog
always_ff@(posedge CLK) //system verilog

例子:
always@(*) //verilog
always_comb //system verilog

//-------------------------------------------------------------
var logic [3:0] rLED;

always_comb //组合逻辑行为声明,输出选择器是组合逻辑
if(isStart[0]) rLED = LED_U1;
else if(isStart[1]) rLED = LED_U2;
else rLED = 4'dx;

assign LED = rLED;

//-------------------------------------------------------------


4、2003 system verilog wire和var一样有bit(2态)和logic(4态),在2005年system verilog将其废除,默认下wire是logic(4态):
wire DoneSig_U1 //system verilog or verilog等价关系
wire logic DoneSig_U1 //system verilog 等价关系
wire bit DoneSig_U1 //错误wire声明

5、struct与typedef

注意:与C语言结构体的用法不同
typedef struct {bit L0,L1,L2,L3;} LED_Struct;//自定义结构,LED_Struct

var LED_Struct rLED;
always_ff@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
rLED.L0 = 1'b0;
rLED.L1 = 1'b0;
rLED.L2 = 1'b0;
rLED.L3 = 1'b0;

...
end
......
assign

6、struct与packed
5中定义的结构体需要为每个成员单独赋值,当声明自定义结构之际加上packed关键字,该自定义为就按着位操作连接起来,
LED_Struct的第[0]位是L0,第[1]位是L1:

tepedef struct packed{bit L3,L2,L1,L0;} LED_Struct;//packed以后的自定义结构

var LED_Struct rLED; //声明为暂存类型的自定义结构rLED
var bit [3:0] rLED; //等价关系

rLED <= 4'd0;

有packed的自定义结构声明暂存类型时,LED_Struct声明一个名为rLED的暂存类型,而该rLED与"var bit [3:0] rLED"声明方法有等价的关系,rLED可以直接为所有成员赋值。

7、RAM与packed

reg [7:0] ram [3:0]; //verilog声明4个8位宽的RAM

var bit [width][words] name; //声明数组-System Verilog
var bit name [width][words];//声明内存(ram)-System Verilog

例子:
var bit [3:0][3:0] Array; //建立名为Array的二维数组,位宽为4,字为4
var bit ram [3:0][3:0]; //建立位宽为4,字为4的ram

var bit [][]Array={4'b1000,4'b0100,4'b0010,4'b0001};//建立数组的时候直接为数组赋值,默认情况下数组初值为0

always_ff@(...negedge RSTn)
if(!RSTn)
begin
Array <= '{default:0};//整体数组赋值0
...
end

always_ff@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
Array[0]= 4'b0001; //成员逐个赋值
Array[1]= 4'b0010;
Array[2]= 4'b0100;
Array[3]= 4'b1000;
...
end

var bit [3:0][3:0] Array
var bit [15:0] rData //两者为等价关系,二维Array可以用一维rData看待

System Verilog的数组声明是消耗寄存器资源而不是内存资源。对于FPGA来说,寄存器资源非常宝贵,不适合用来大量存储数据,因此使用时要注意。

转载于:https://www.cnblogs.com/loves6036/p/5365061.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值