handel-c工程中的main函式都是在乙個時鐘源的控制下執行的。搞清楚每一部分的**在哪個時鐘週期段內執行對程式設計者來說是一件極其重要的事情。這不僅是因為它可以使設計者寫出的**可以執行速度更快,更重要的是它關係到設計者寫出的**當用到並行結構時是否能夠正確的執行,是否能正確的按照設計者的設計初衷去執行。精確的時鐘控制對於與外部硬體通訊也是十分的重要,因為某些硬體對給出的控制訊號的時序變化要求非常嚴格。
handel-c中的時鐘使用規則如下:
1、賦值語句和延時語句每執行一次花費乙個時鐘週期。
2、通道通訊一般情況只花費乙個時鐘週期,如果通道通訊的某個分支未開始傳輸資料,那麼另乙個分支就一直等待直到它做好傳輸資料的準備。
例如:par
上述**只花銷了乙個時鐘,因為x向通道寫和y從通道讀是同時開始的.這個並行塊實現的功能相當於把x賦值給了y.
parlink ? y; // parallel branch 2
}**中的branch2等到第三個時鐘週期branch1準備好資料傳輸時才開始通訊。
3、表示式沒有時鐘花銷,比如((y*z)+(w*k))<<2沒有時鐘花銷,越複雜的表示式只是會包含更多的硬體資源。
handel-c工程的時鐘源可以通過fpga晶元的某個引腳由外部時鐘振盪器提供,也可以由fpga晶元內部自己生成。為main函式指定時鐘源的一般形式為:
set clock=location;
location的形式可以是:
location描述
internal expression
時鐘由晶元內部產生
external[pin]
時鐘由外部引腳提供
external_divide[pin]
時鐘由外部引腳提供並分頻
具體使用方式如下:
set clock=external 「y2」;
set clock=external_divide 「y2」 2;
第一條語句的意思是時鐘由外部引腳y2提供,第二條語句的意思是時鐘是由外部引腳y2提供的時鐘經2分頻以後的值。
時鐘控制命令
lkconcmd 0xc6 時鐘控制命令 位 名稱 復位 r w 描述7 osc32k 1 r w 32 khz 時鐘振盪器選擇。設定該位只能發起乙個時鐘源改變。clkconsta.osc32k 反映當前的設定。當要改變該位必須選擇 16 mhz rcosc 作為系統時鐘。0 32 khz xosc...
2 7 控制時鐘偏移
整個晶元中時鐘訊號到達各級電路的時間差即為時鐘偏移 短路徑問題 即邏輯單元速度快,輸出資料比時鐘傳播到下個邏輯單元還要快,就會造成資料丟失邏輯功能出錯。人為新增佈線延遲,pcb上即是等長繞線。時鐘反轉,在傳送暫存器上使用加了傳輸門的時鐘,在接收暫存器上直接使用時鐘,使得後者更早觸發。對於詹森計數器和...
遠端時鐘控制系統
編寫遠端時鐘控制系統的過程中,此過程中解決了上篇提到的串列埠與定時器的問題,很好的用到串列埠通訊協議,可通過串列埠傳送選單調節時鐘,發布廣告,控制1602顯示屏 include include define uint unsigned int define uchar unsigned char v...