国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

systemverilog中l(wèi)ogic變量的使用

2019-11-08 02:10:51
字體:
供稿:網(wǎng)友

對verilog的初學(xué)者來說,線網(wǎng)和變量reg之間的不同點(diǎn),也許是最難的。你有時得用reg而有時卻得使用wire,使用來使用去,簡直頭暈。

而在SystemVerilog中,我們將會看到你可以在過去verilog中用reg型或是wire型的地方用logic型來代替。

實(shí)際上logic是對reg數(shù)據(jù)類型的改進(jìn),使得它除了作為一個變量之外,還可以被連續(xù)賦值、門單元和模塊所驅(qū)動,顯然,logic是一個更合適的名字。

舉個RAM modelling的例子來說明上述問題,我們分別用Verilog和SystemVerilog來實(shí)現(xiàn)。

復(fù)制代碼//RAM modelling in Verilog1 module mema (r_wb,addr,d_q);2 input r_wb;3 input [7:0] addr;4 inout [7:0] d_q;5 6 wire r_wb;7 wire [7:0] addr, d_q;8 reg [7:0] mem [0:255];9 10 assign d_q= (r_wb) ? mem[addr] : 8'hz ;11  12 always @(r_wbor addr)13 if (!r_wb)14 mem[addr]= d_q;15 endmodule復(fù)制代碼復(fù)制代碼 //RAM modelling in SystemVerilog1 module mema (r_wb,addr,d_q);2 input r_wb;3 input [7:0] addr;4 inout [7:0] d_q;5 6 logic r_wb;7 logic [7:0] addr logic [7:0] d_q;  //Gotcha! should be declared: wire [7:0] d_q;8 logic [7:0] mem [0:255];9 10 always @(r_wbor addr)11 if (!r_wb)12 mem[addr]= d_q;13 else14 d_q = mem[addr];15 endmodule復(fù)制代碼

如上所看,拋去inout類型外,其余所有的變量都可以聲明為logic類型,不用區(qū)分線網(wǎng)和變量reg之間的不同點(diǎn),所以,SystemVerilog的優(yōu)點(diǎn)是不是很明顯?

SystemVerilog的其他優(yōu)點(diǎn),請大家參考:http://www.doulos.com/knowhow/sysverilog/tutorial

值得注意的是,logic不能有多個結(jié)構(gòu)性的驅(qū)動,也就是說,logic不允許使用多于一次的持續(xù)賦值語句和輸出端口連接的給同一變量賦值。這是因?yàn)闆]有類似于線網(wǎng)的多重驅(qū)動變量的定論。因此,假如你通過這些方式給一個變量賦過值,你將不能再用過程賦值語句給變量賦值。

如上面RAM modelling的代碼,在對inout雙向總線建模的時候,需要使用線網(wǎng)類型。(比起verilog-1995,新增加的許多systemverilog feature都要求變量只有一個驅(qū)動!)

如下代碼的第3行和第4行,logic型的"exception"相繼被兩個實(shí)例化賦值,于是編譯器便會報錯。解決的辦法是把exception定義成wire型。

復(fù)制代碼 //Multiple Driver Example1 module multiple_drivers (output logic exception,2 input logic [7:0] a, b);3 is_zero inst0 (exception, b);4 is_greater inst1 (exception, a, b);5 endmodule6 7 module is_zero (output logic zero,8 input logic [7:0] x);9 always @(x)10 if (x==0) zero=1;11 else zero=0;12 endmodule13 14 module is_greater (output logic greater,15 input logic [7:0] x, y);16 always @(x, y)17 if (x> y) greater=1;18 else greater=0;19 endmodule
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 滦南县| 奉新县| 通州区| 布拖县| 益阳市| 汝阳县| 合阳县| 维西| 布拖县| 新安县| 文成县| 西盟| 诸城市| 武强县| 淅川县| 西城区| 吐鲁番市| 秭归县| 吉林省| 洞头县| 福州市| 元氏县| 黄浦区| 莒南县| 延津县| 鲁山县| 定兴县| 盐边县| 余姚市| 平谷区| 白山市| 保亭| 万盛区| 富川| 津市市| 晴隆县| 扶风县| 固原市| 上犹县| 铁岭市| 综艺|