浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » EDA/PLD

基于Verilog語言的可維護(hù)性設(shè)計技術(shù)

發(fā)布時間:2008/8/12 0:00:00 訪問次數(shù):693

  隨著集成電路制造技術(shù)的發(fā)展,對設(shè)計提出了更多的挑戰(zhàn),隨著設(shè)計復(fù)雜度的增加,又提出了片上系統(tǒng)(soc)的概念。為了加速設(shè)計收斂,設(shè)計重用、可測性設(shè)計、可驗證性設(shè)計和可維護(hù)性設(shè)計得到了更多重視。本文以veriloghdl為例,對可維護(hù)性設(shè)計進(jìn)行了初步探討。

1、設(shè)計重用與可維護(hù)性設(shè)計

  設(shè)計重用是一個很大的概念,嚴(yán)格來講,可驗證性設(shè)計和可維護(hù)性設(shè)計都在設(shè)計重用之列?删S護(hù)性設(shè)計的目的本身就是便于設(shè)計重用,便于讓后來人讀懂前人所寫的代碼,但設(shè)計重用包括的內(nèi)容更廣泛。

  設(shè)計重用講的是設(shè)計總體風(fēng)格而不是設(shè)計的細(xì)節(jié),“it is about forests, rather than trees”。最重要的概念:本地化(locality)――一定要盡量使問題本地化,這樣有利于問題的排除。對于大的設(shè)計尤為重要。

三條基本原則

  盡量采用全同步設(shè)計,將輸入和輸出寄存,這樣有利于將時序優(yōu)化本地化

  采用bottom-up驗證方法,保證每個子模塊的功能是正確的,然后再進(jìn)行整體驗證。

  花時間設(shè)計一個好的設(shè)計規(guī)范,力圖使這樣的規(guī)范具有好的體系結(jié)構(gòu)和模塊劃分,這樣有利于本地化的有效實現(xiàn)。

  一個好的設(shè)計應(yīng)該包括:完備的文檔、好風(fēng)格的代碼、詳盡的注釋、良好易用的驗證環(huán)境和魯棒的腳本。

  影響設(shè)計重用的障礙本質(zhì)上說是管理和企業(yè)文化;開發(fā)和管理內(nèi)部ip資源是最大的重用挑戰(zhàn)。

  關(guān)于設(shè)計重用這里不再討論,否則就有喧賓奪主之嫌了。

2、關(guān)于代碼可擴(kuò)展性的一點討論

  代碼可擴(kuò)展性實際上也包括在設(shè)計重用之內(nèi)。代碼可擴(kuò)展性或稱可擴(kuò)展性設(shè)計要求便于向?qū)硇碌脑O(shè)計過渡。比如64位的pci標(biāo)準(zhǔn)出來的時候,現(xiàn)行的32位pci接口設(shè)計模塊可以通過比較簡單的改動而變?yōu)?4位,而不需要一切從頭再來。一般設(shè)計中通過定義參數(shù)和宏來便于修改。典型例子就是總線:

`define word 16
`define dword 32
reg [`word-1:0] intruction
reg [`dword-1:0] data_bus,addr_bus;
當(dāng)然代碼可擴(kuò)展性不僅僅包括參數(shù)和宏的使用,如下例:
module tri_buf(in,out, ena);
parameter width=8;
input [width-1:0] in;
output[width-1:0] out;
input ena;
assign out= ena?in:’bz;
endmodule

  這是一段有潛在問題的代碼,verilog將高位擴(kuò)展為0來匹配輸出,所以當(dāng)width>32時,上述代碼是有問題的,仿真的時候甚至都看不出來,因此不利于可擴(kuò)展性。象這樣的問題可以用verilog lint等工具來檢查。

3、可讀性最重要

  可讀性最重要。許多設(shè)計者有個習(xí)慣:追求盡量用短的代碼來完成同樣的功能,國內(nèi)許多考試中也要求用少于多少行的代碼完成某某功能(很不好的傾向)。對于hdl,我不推薦這樣的風(fēng)格,因為綜合工具會幫助你完成優(yōu)化工作。我的建議是:同樣的代碼可長可短,不要為了減少行數(shù)而影響可讀性。如下例:

module rrarb(request,grant,reset,clk);
input [1:0] request;
output[1:0]grant;
input reset;
input clk;
wire winner;
reg last_winner;
reg [1:0] grant;
wire[1:0] next_grant;

assign next_grant[0]=~reset&(request[0] & (~request[1]|last_winner));
assugn next_grant[1]=~reset& (request[1] &(~request[0]| ~last_winner));
assign winner=~reset & ~next_grant[0] &(last_winner | next_grant[1]);
always @(posedge clk)
begin
last_winner=winner;
grant=next_grant;
end
當(dāng)request[1:0]=2’b00,時,last_winner會發(fā)生什么變化?上面的代碼可讀性較之下面的代碼差很多。
module rrarb(request,grant,reset,clk);
input [1:0] request;
output[1:0]grant;
input reset;
input clk;
wire winner;
reg last_winner;
reg [1:0] grant;
always @(posedge clk)
begin
if(reset) begin
grant<=2’b00;
last_winner<=0;
end
else begin
grant<=2’b00;
if(request!=2’b00) begin:find_winner
reg winner;
case(request)
2’b01:winner<=0;
2’b10:winner<=1;
2’b11:if (last_winner==1’b0) winner<=1;
else winner<=0;
default:winner<=0;
endcase
grant[winner] <=1’b1;
last_winner<=winner;
end
end
end
endmodule

  上述兩個代碼的綜合結(jié)果差不多。而且上面第一段代碼在always塊內(nèi)采用阻塞賦值的方法也存在潛在問題。

4、要有好的注釋風(fēng)格

  要有好的注釋風(fēng)格。減少注釋的行數(shù)跟節(jié)約代碼的行數(shù)一樣,我不推薦。像代碼有好壞一樣,注釋也有好壞之分。比如:

//increment addr
addr<=addr+1;

  上例中的注釋就是一句廢話,因為地址加1是不言自明的

  隨著集成電路制造技術(shù)的發(fā)展,對設(shè)計提出了更多的挑戰(zhàn),隨著設(shè)計復(fù)雜度的增加,又提出了片上系統(tǒng)(soc)的概念。為了加速設(shè)計收斂,設(shè)計重用、可測性設(shè)計、可驗證性設(shè)計和可維護(hù)性設(shè)計得到了更多重視。本文以veriloghdl為例,對可維護(hù)性設(shè)計進(jìn)行了初步探討。

1、設(shè)計重用與可維護(hù)性設(shè)計

  設(shè)計重用是一個很大的概念,嚴(yán)格來講,可驗證性設(shè)計和可維護(hù)性設(shè)計都在設(shè)計重用之列?删S護(hù)性設(shè)計的目的本身就是便于設(shè)計重用,便于讓后來人讀懂前人所寫的代碼,但設(shè)計重用包括的內(nèi)容更廣泛。

  設(shè)計重用講的是設(shè)計總體風(fēng)格而不是設(shè)計的細(xì)節(jié),“it is about forests, rather than trees”。最重要的概念:本地化(locality)――一定要盡量使問題本地化,這樣有利于問題的排除。對于大的設(shè)計尤為重要。

三條基本原則

  盡量采用全同步設(shè)計,將輸入和輸出寄存,這樣有利于將時序優(yōu)化本地化

  采用bottom-up驗證方法,保證每個子模塊的功能是正確的,然后再進(jìn)行整體驗證。

  花時間設(shè)計一個好的設(shè)計規(guī)范,力圖使這樣的規(guī)范具有好的體系結(jié)構(gòu)和模塊劃分,這樣有利于本地化的有效實現(xiàn)。

  一個好的設(shè)計應(yīng)該包括:完備的文檔、好風(fēng)格的代碼、詳盡的注釋、良好易用的驗證環(huán)境和魯棒的腳本。

  影響設(shè)計重用的障礙本質(zhì)上說是管理和企業(yè)文化;開發(fā)和管理內(nèi)部ip資源是最大的重用挑戰(zhàn)。

  關(guān)于設(shè)計重用這里不再討論,否則就有喧賓奪主之嫌了。

2、關(guān)于代碼可擴(kuò)展性的一點討論

  代碼可擴(kuò)展性實際上也包括在設(shè)計重用之內(nèi)。代碼可擴(kuò)展性或稱可擴(kuò)展性設(shè)計要求便于向?qū)硇碌脑O(shè)計過渡。比如64位的pci標(biāo)準(zhǔn)出來的時候,現(xiàn)行的32位pci接口設(shè)計模塊可以通過比較簡單的改動而變?yōu)?4位,而不需要一切從頭再來。一般設(shè)計中通過定義參數(shù)和宏來便于修改。典型例子就是總線:

`define word 16
`define dword 32
reg [`word-1:0] intruction
reg [`dword-1:0] data_bus,addr_bus;
當(dāng)然代碼可擴(kuò)展性不僅僅包括參數(shù)和宏的使用,如下例:
module tri_buf(in,out, ena);
parameter width=8;
input [width-1:0] in;
output[width-1:0] out;
input ena;
assign out= ena?in:’bz;
endmodule

  這是一段有潛在問題的代碼,verilog將高位擴(kuò)展為0來匹配輸出,所以當(dāng)width>32時,上述代碼是有問題的,仿真的時候甚至都看不出來,因此不利于可擴(kuò)展性。象這樣的問題可以用verilog lint等工具來檢查。

3、可讀性最重要

  可讀性最重要。許多設(shè)計者有個習(xí)慣:追求盡量用短的代碼來完成同樣的功能,國內(nèi)許多考試中也要求用少于多少行的代碼完成某某功能(很不好的傾向)。對于hdl,我不推薦這樣的風(fēng)格,因為綜合工具會幫助你完成優(yōu)化工作。我的建議是:同樣的代碼可長可短,不要為了減少行數(shù)而影響可讀性。如下例:

module rrarb(request,grant,reset,clk);
input [1:0] request;
output[1:0]grant;
input reset;
input clk;
wire winner;
reg last_winner;
reg [1:0] grant;
wire[1:0] next_grant;

assign next_grant[0]=~reset&(request[0] & (~request[1]|last_winner));
assugn next_grant[1]=~reset& (request[1] &(~request[0]| ~last_winner));
assign winner=~reset & ~next_grant[0] &(last_winner | next_grant[1]);
always @(posedge clk)
begin
last_winner=winner;
grant=next_grant;
end
當(dāng)request[1:0]=2’b00,時,last_winner會發(fā)生什么變化?上面的代碼可讀性較之下面的代碼差很多。
module rrarb(request,grant,reset,clk);
input [1:0] request;
output[1:0]grant;
input reset;
input clk;
wire winner;
reg last_winner;
reg [1:0] grant;
always @(posedge clk)
begin
if(reset) begin
grant<=2’b00;
last_winner<=0;
end
else begin
grant<=2’b00;
if(request!=2’b00) begin:find_winner
reg winner;
case(request)
2’b01:winner<=0;
2’b10:winner<=1;
2’b11:if (last_winner==1’b0) winner<=1;
else winner<=0;
default:winner<=0;
endcase
grant[winner] <=1’b1;
last_winner<=winner;
end
end
end
endmodule

  上述兩個代碼的綜合結(jié)果差不多。而且上面第一段代碼在always塊內(nèi)采用阻塞賦值的方法也存在潛在問題。

4、要有好的注釋風(fēng)格

  要有好的注釋風(fēng)格。減少注釋的行數(shù)跟節(jié)約代碼的行數(shù)一樣,我不推薦。像代碼有好壞一樣,注釋也有好壞之分。比如:

//increment addr
addr<=addr+1;

  上例中的注釋就是一句廢話,因為地址加1是不言自明的

相關(guān)IC型號

熱門點擊

 

推薦技術(shù)資料

聲道前級設(shè)計特點
    與通常的Hi-Fi前級不同,EP9307-CRZ這臺分... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!