|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有一困擾已久的問題想弄明白 |
| 作者:sailorljg 欄目:EDA技術(shù) |
是這樣的,CPLD與單片機(jī)在編程上的主要區(qū)別是一個(gè)是并發(fā)一個(gè)是順序,由此產(chǎn)生了另外一個(gè)問題,在CPLD中,一個(gè)變量只能在一個(gè)進(jìn)程塊中進(jìn)行值的修改,不能在其它進(jìn)程塊中進(jìn)行修改,于是在一個(gè)進(jìn)程塊中的變量要進(jìn)行值的改變就我現(xiàn)在所遇情況我把它們分成三種,一是以另外一個(gè)變量的改變作為標(biāo)志,二是在此進(jìn)程塊中延時(shí)后自動改變,就是用timescale 再加上#N,但此法行不通,據(jù)說timescale 只能用于仿真,而不能被綜合,于硬件無用!! 于是我又有了第三種思路,另外設(shè)一進(jìn)程進(jìn)行延時(shí)(定時(shí))控制,以本進(jìn)程為A進(jìn)程,延時(shí)(定時(shí))進(jìn)程為B進(jìn)程,以A進(jìn)程中變量I0的上升沿為啟動條件來啟動定時(shí)器進(jìn)程B工作,定時(shí)滿后再置進(jìn)程B中的定時(shí)滿標(biāo)志I1,然后A進(jìn)程再以I1的上升沿作為I0清零的條件.I1標(biāo)志可在工作中某工作周完結(jié)時(shí)自動清零,大俠們看看我的思中對否,會遇到何種問題? 在這種方式指導(dǎo)下,我遇到了一個(gè)非常頭疼的問題,這個(gè)問題現(xiàn)在都還理不出頭緒來,讓我再想想.我現(xiàn)在真的很暈。。! |
| 2樓: | >>參與討論 |
| 作者: oaipoaip 于 2006/7/21 8:37:00 發(fā)布:
電路中的延時(shí)一般用計(jì)數(shù)器實(shí)現(xiàn) |
|
| 3樓: | >>參與討論 |
| 作者: sailorljg 于 2006/7/21 9:16:00 發(fā)布:
哦!忘記說了,我的第三種方式是用計(jì)數(shù)器對時(shí)鐘計(jì)數(shù)來實(shí)現(xiàn)的! |
|
| 4樓: | >>參與討論 |
| 作者: tuoluo 于 2006/7/21 18:04:00 發(fā)布:
用 用信號取代變量是否可以避免這個(gè)問題?? |
|
| 5樓: | >>參與討論 |
| 作者: sailorljg 于 2006/7/21 21:40:00 發(fā)布:
不太明白,您能不能再說的詳細(xì)些? 先謝了!!! |
|
| 6樓: | >>參與討論 |
| 作者: hover99 于 2006/7/23 0:01:00 發(fā)布:
在cpld上邊寫的是電路而不是程序 注意在單片機(jī)內(nèi)寫的code是程序,而用cpld實(shí)現(xiàn)的rtl代碼是電路而不是程序!對于電路來講,一個(gè)節(jié)點(diǎn)的多個(gè)驅(qū)動源試圖在同一時(shí)刻改變該節(jié)點(diǎn)的邏輯值,會導(dǎo)致競爭,事實(shí)上真實(shí)電路有這種情況,比如兩個(gè)首尾相連而驅(qū)動能力不同的反相器可以構(gòu)成bus keeper。 雖然我們有在多個(gè)進(jìn)程中改變同一個(gè)信號的企圖,但是事實(shí)上,我們并不會要求在同一時(shí)刻將這個(gè)信號賦為幾個(gè)值,所以這個(gè)問題其實(shí)很容易解決。例如進(jìn)程a對信號c賦為A,進(jìn)城b對信號c賦為B,可以這樣解決: 進(jìn)程a: ... a_set_c = 1; a_set_c_value = A; ... 進(jìn)程b: ... b_set_c = 1; b_set_c_value = B; ... always @(posedge clk or negedge rst_n) begin if (~rst_n) c <= #`RD n'b0; else if (a_set_c) c <= # `RD a_set_c_value; else if (b_set_c) c <= # `RD b_set_c_value; end |
|
| 7樓: | >>參與討論 |
| 作者: sailorljg 于 2006/7/23 10:10:00 發(fā)布:
請問大俠:"# `RD "在此是何意? 我在書上好象沒有看到過這個(gè)語法! |
|
| 8樓: | >>參與討論 |
| 作者: hover99 于 2006/7/23 22:37:00 發(fā)布:
赫赫 # `RD代表延遲RD個(gè)單位時(shí)間。綜合器回忽略這個(gè)延遲,如果不加有些仿真器可能會產(chǎn)生錯(cuò)誤。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |