primetime是進行靜態時序分析(sta)的工具,根據設計者給出的時序約束來對電路進行分析觀察設計是否滿足時序要求。
pt能夠提供以下檢查:
建立時間和保持時間檢查;
時鐘脈衝寬度的檢查;
時鐘門的檢查;
未約束的時鐘端點;
組合反饋迴路等。
需要注意的是pt的輸入檔案是門級網表,一般先要通過dc將rtl級電路轉化為門級網表之後作為pt的輸入。
例項:需要**的電路:fifo.v
module fifo(datain, rd, wr, rst, clk, dataout, full, empty);
input [7:0] datain;
input rd, wr, rst, clk;
output [7:0] dataout;
output full, empty;
wire [7:0] dataout;
reg full_in, empty_in;
reg [7:0] mem [15:0];
reg [3:0] rp, wp;
assign full = full_in;
assign empty = empty_in;
// memory read out
assign dataout = mem[rp];
// memory write in
always@(posedge clk) begin
if(wr && ~full_in) mem[wp]<=datain;
end// memory write pointer increment
always@(posedge clk or negedge rst) begin
if(!rst) wp<=0;
else begin
if(wr && ~full_in) wp<= wp+1'b1;
endend// memory read pointer increment
always@(posedge clk or negedge rst)begin
if(!rst) rp <= 0;
else begin
if(rd && ~empty_in) rp <= rp + 1'b1;
endend// full signal generate
always@(posedge clk or negedge rst) begin
if(!rst) full_in <= 1'b0;
else begin
if( (~rd && wr)&&((wp==rp-1)||(rp==4'h0&&wp==4'hf)))
full_in <= 1'b1;
else if(full_in && rd) full_in <= 1'b0;
endend// empty signal generate
always@(posedge clk or negedge rst) begin
if(!rst) empty_in <= 1'b1;
else begin
if((rd&&~wr)&&(rp==wp-1 || (rp==4'hf&&wp==4'h0)))
empty_in<=1'b1;
else if(empty_in && wr) empty_in<=1'b0;
endendendmodule
對電路進行dc綜合以得到門級網表,dc綜合的指令碼如下dc.tcl:注意庫路徑要自己改
set synopsys_dc_setup_file 0
if
define_design_lib work -path "work"
analyze -library work -format verilog fifo.v
elaborate -architecture verilog -library work fifo
check_design
create_clock clk -name ideal_clock1 -period 20
set_input_delay 8.0 [remove_from_collection [all_inputs] clk] -clock ideal_clock1
set_output_delay 8.0 [all_outputs] -clock ideal_clock1
set_max_area 0
compile -map_effort medium -area_effort medium
report_area > synth_area.rpt
report_cell > synth_cells.rpt
report_qor > synth_qor.rpt
report_resources > synth_resoutces.rpt
report_timing -max_paths 10 > synth_timing.rpt
write_sdc fifo.sdc
write -f ddc -hierarchy -output fifo.ddc
write -hierarchy -format verilog -output fifo.v
在將fifo.v檔案和dc.tcl檔案放好後,右鍵開啟終端,先後輸入
dc_shell
source dc.tcl
完成dc綜合,此時fifo.v已經轉化問門級網表
接下來進行pt時序分析
右鍵開啟終端,輸入
pt_shell
和dc一樣,指定庫的路徑
set target_library [ list /home/tshell/lib/tsmc90/fast.db]
set link_library "* $target_library"}
讀入fifo.v檔案
read_verilog fifo.v
指定頂層檔案
current_design fifo
讀入時序約束檔案sdc檔案
source fifo.sdc
之後可以看分析結果,設計中主要四種路徑時序比較典型:
輸入到暫存器
暫存器到暫存器
暫存器到輸出
輸入到輸出
輸入如下指令檢視時序
report_timing -from [all_inputs] -to [all_registers -data_pins] > timing.rpt
report_timing -from [all_register -clock_pins] -to [all_registers -data_pins] >> timing.rpt
report_timing -from [all_registers -clock_pins] -to [all_outputs] >> timing.rpt
report_timing -from [all_inputs] -to [all_outputs] >> timing.rpt
之後開啟timing.rpt檢視結果。
注:
report_timing -from [all_inputs] -to [all_registers -data_pins] > timing.rpt
是預設下的輸出,如果想進行特定條件下的輸出,需要加入引數
如要輸出暫存器到暫存器的保持時間最小的10條路徑,可以修改指令
report_timing -from [all_register -clock_pins] -to [all_registers -data_pins] -max_paths 10 -slack_lesser_than 200 -delay_type min > timing.rpt
以上是通過指令行完成,也可以把指令寫成tcl指令碼來執行。
set target_library [ list /home/tshell/lib/tsmc90/fast.db]
set link_library "* $target_library"
read_verilog fifo.v
current_design fifo
link_design fifo
source fifo.sdc
report_timing -from [all_inputs] -to [all_registers -data_pins] > timing.rpt
report_timing -from [all_register -clock_pins] -to [all_registers -data_pins] >> timing.rpt
report_timing -from [all_registers -clock_pins] -to [all_outputs] >> timing.rpt
report_timing -from [all_inputs] -to [all_outputs] >> timing.rpt
儲存後,輸入
pt_shell
source dc.tcl
即可
Linux下ZendOptimizer的安裝與配置
內容 在裝的好的red hat linux 9 apache 2.0.55 mysql 5.1.6 php 5.1.2後,接下來就是安裝linux下的php加速器zendoptimizer 2.6.2了。自己編譯 php 後,zend optimizer 2.6.2 需要自己設定一下,請參照以下步驟...
Linux下的命令
管理員 普通使用者 pwd 顯示當前檔案全路徑 date 顯示系統當前日期和時間 who 顯示當前已登入的所有使用者名稱 cal 顯示日曆 uname r m,i,v 顯示當前系統作業系統資訊 wc l 行數,w字數,c位元組數 統計字數 clear 清屏 檔案操作touch 新建檔案mkdir 新...
linux 下 奇怪的
最近在做乙個從hp ux移行到linux 上面的專案,遇到乙個命令 hp ux date y m d h m s read sys date sys time dev null 2 1 但是這個命令在linux 下,就達不到預期的結果 之後問了高手,才得到解決辦法 linux read sys da...