fpga verilog語(yǔ)法篇 3讓模塊工作 3注意事項(xiàng)
fpga中,如果讓一個(gè)模塊循環(huán)工作,
比如,串口模塊如果要輸出多個(gè)字符,就需要執(zhí)行多次.
每次循環(huán)執(zhí)行前,需要清理之前的殘留參數(shù)和狀態(tài),并準(zhǔn)備本次執(zhí)行的數(shù)據(jù)和狀態(tài).
需要解決的問(wèn)題:
1,在發(fā)送前需要準(zhǔn)備好什么?
??? 上次發(fā)送完,有沒(méi)有進(jìn)行計(jì)數(shù)變量的清理.
??? 要發(fā)送或處理的數(shù)據(jù)有沒(méi)有準(zhǔn)備好.(檢查上一級(jí)模塊是否完成輸出).
2,怎么發(fā)送出去?
??? 邏輯的編寫:
??? 可以用狀態(tài)機(jī)進(jìn)行各個(gè)狀態(tài)的實(shí)現(xiàn).
??? 也可以用使能完成標(biāo)志,實(shí)現(xiàn)流水線一級(jí)一級(jí)的傳遞.
3,如果沖突了怎么辦?
??? 本次數(shù)據(jù)還沒(méi)有發(fā)完,又有一個(gè)數(shù)據(jù)傳過(guò)來(lái)了.
??? 需要控制時(shí)序,設(shè)計(jì)緩存,考慮上下級(jí)模塊間的配合.
4,如何控制模塊工作和停止?
??? 是讓模塊一直工作下去,還是每次觸發(fā),只運(yùn)行一次.
??? 如果每次觸發(fā),只運(yùn)行一次:
??? 需要設(shè)立一個(gè)標(biāo)志,掛起的標(biāo)志.標(biāo)志=1,工作.標(biāo)志=0,停止.
??? 如果是狀態(tài)機(jī),設(shè)立一個(gè)"掛起"的空閑狀態(tài).完成工作后,進(jìn)入空閑狀態(tài).
5,發(fā)送完之后,如何清理?
??? 為下次工作做準(zhǔn)備,需要清理計(jì)數(shù)變量,緩存.
6,有沒(méi)有時(shí)序沖突問(wèn)題?
??? 一個(gè)快,一個(gè)慢,那么模塊之間怎樣進(jìn)行傳輸,就需要規(guī)定好用統(tǒng)一的時(shí)序.
??? 需要對(duì)輸入標(biāo)志,和輸出標(biāo)志進(jìn)行處理和打拍,否則模塊之間的銜接有問(wèn)題.
7,模塊中每個(gè)程序塊,always,assign都可以看作是一個(gè)并行獨(dú)立的小程序.他們之間是否有沖突?
??? 尤其是在兩個(gè)程序塊之間,對(duì)同一個(gè)數(shù)組操作的時(shí)候,角標(biāo)的問(wèn)題.邊界的問(wèn)題.
??? 變量是否在程序塊之間進(jìn)行了及時(shí)更新.