雙網(wǎng)傳真機的編譯碼電路設計與實現(xiàn)
4 譯碼電路單元設計
對于MHC碼而言,首先它是一個變長碼,發(fā)送端在編碼時把游程長度所對應的碼元數(shù)據(jù)不留間隙的存入發(fā)送緩沖區(qū)中,經(jīng)過調(diào)制載波后發(fā)送出去。接收端解調(diào)出來的數(shù)據(jù),即編碼數(shù)據(jù),譯碼時從該數(shù)據(jù)序列中分離出碼字,由碼字去找出所對應的游程長度,輸出到打印緩沖區(qū),就完成了譯碼過程。要提高譯碼速度,可以采用多步合一的方法,減少查找碼表的次數(shù),也就是一次輸入多個碼元。根據(jù)碼表的特點,對白譯碼而言,第一次可直接輸入4個碼元,對于黑譯碼,第一次可輸入2個碼元,隨后每次可輸入2個碼元或1個碼元。
譯碼時,通過Avalon總線接口將編碼數(shù)據(jù)寫入一個32×256 b的緩沖區(qū);譯碼完成后,將數(shù)據(jù)送到打印緩沖區(qū),由信號控制模塊控制打印緩沖區(qū)的復位、讀時鐘、讀請求和打印頭時鐘信號,打印緩沖區(qū)的大小為1×2 048 b。當寫入個數(shù)記到1 728時,就會進行讀操作。如果出現(xiàn)誤碼,寫入個數(shù)超過1 728時,F(xiàn)IFO清零,此時不進行讀操作,而是將誤碼的那行數(shù)據(jù)丟棄,并加入一行白點(1 728個‘0’)。傳真譯碼電路如圖5所示。
在譯碼電路中,檢測到EOL后,將對譯碼緩沖區(qū)的數(shù)據(jù)交替地進行白譯碼、黑譯碼、白譯碼操作。其中譯碼碼表的地址和數(shù)據(jù)寬度均為8 b。譯碼時,接收4 b數(shù)據(jù)(白碼元),通過形成的8 b地址來查找碼表并返回一個8 b數(shù)據(jù)Ram_Data,并根據(jù)此數(shù)據(jù)低2位的值來進行下一步操作。當Ram_Data低2位為‘01’時,輸出數(shù)據(jù)高6位的值,此時終止碼使能有效;當Ram_Data低2位為‘11’時,輸出數(shù)據(jù)高6位的值,此時形成碼使能有效;當Ram_Data低2位為‘00’時,表示接收1 b數(shù)據(jù)和Ram_Data相加形成新地址;當Ram_Data低2位為‘10’時,表示接收2 b數(shù)據(jù)和Ram_Data相加形成新地址;繼續(xù)查找碼表,重復操作,直到譯出碼元或出錯為止。查找黑白碼表不同的是:對于白譯碼而言,由于最短碼字長度為4,所以第一次可直接查找4 b碼元,隨之可查找2 b或1 b碼元;而對于黑譯碼而言,由于最短的碼字長度為2,所以第一次查找2 b碼元,隨之可查找2 b或1 b碼元;輸出的6 b數(shù)據(jù)為連續(xù)黑點或連續(xù)白點的個數(shù)。將譯碼后的數(shù)據(jù)存入1×2 048 b的打印緩沖區(qū),當存儲數(shù)據(jù)滿一行時,輸出到打印頭打印,待清空后再進行下一行的譯碼。掃描到打印一行的時間要求是10 ms,所以譯碼完成后進行等待,直到數(shù)據(jù)鎖存后再進行下一行的譯碼。譯碼狀態(tài)轉(zhuǎn)移圖如圖6所示。
5 仿真驗證與系統(tǒng)測試
采用基于碼表遍歷的驗證策略,對電路進行仿真驗證,并查看輸出波形圖,結果均與設計要求一致。仿真部分波形圖如圖7所示。
其中,fifo_data為編碼數(shù)據(jù);dot_cont為譯出的總點數(shù);white_black_flag為黑白標志位,‘1’表示黑,‘0’表示白。
該電路通過QuartusⅡ環(huán)境下的SOPC配置CPU核,在Altera公司的FPGA開發(fā)板上進行下載,并在NiosⅡ開發(fā)環(huán)境中使用軟件測試該電路,通過寄存器驅(qū)動電路工作,經(jīng)過掃描,CPU核向電路寫入編碼數(shù)據(jù),待輸出標識位有效后,再讀出譯碼后數(shù)據(jù),通過傳真機打印出來。綜合結果表明電路可以工作在100 MHz時鐘頻率下。
將傳真標準樣張編碼數(shù)據(jù)送給譯碼模塊完成對譯碼電路的測試,打印出的圖像滿足測試標準。然后將標準樣張原稿經(jīng)過掃描編碼,送給譯碼打印,輸出打印結果與原稿比對。通過反復調(diào)試,軟硬件運行穩(wěn)定,達到系統(tǒng)功能指標。
6 結語
本文采用兩級編碼和快速譯碼的設計思路,在FPGA芯片上實現(xiàn)了編譯碼電路和外設控制器。上層軟件通過寄存器接口完成對硬件系統(tǒng)的控制,經(jīng)過仿真驗證與測試,電路對傳真數(shù)據(jù)正確編譯碼,與軟件系統(tǒng)相配合為高性能的雙網(wǎng)傳真機提供了可靠的技術基礎。
評論