ad7476是採用類似spi的序列介面實現接入主控裝置。
我們看資料手冊,這裡有三根線 sclk,cs,sdata。我們看看時序:
其中cs和sclk是主控端(fpga或者微控制器),sdata是7476的輸出。這個波形一看,我們就知道可以使用計數器實現。
根據我們圖上標註的紅色的數字,可以做乙個計數器,數值從0-34迴圈。cs在0時候開始輸出0,在33時候開始輸出1,而當計數器數值是8,10,這些時鐘的上公升邊緣時,sdata資料已經ready可以被打入暫存器。這裡注意上第一紅線位置我們看到是8,9之間,那應該取8還是9呢,我們看到資料db11和8同時就緒的,所以應該取吧,他們是時鐘對齊的。
這樣乙個採集週期用了35時鐘週期,而乙個採集週期是1us(因為7476是1m 的取樣速率),這樣就要求我們採集器的時鐘週期是35m。有了以上分析,**呼之欲出。我們簡單寫寫。
module ad7476_sample(
input clk,rst,
input adc_sdata,
output reg adc_sclk,adc_csn,
output reg [11:0] adc_res,
output reg adc_valid
);reg [7:0] cntr ;
always @ (posedge clk) //clk 35mhz
if (rst)cntr<=0;else if (cntr == 34) cntr<=0;else cntr<=cntr+1;
always @ (posedge clk)
case (cntr )
0: adc_csn <= 0;
33: adc_csn <= 1;
endcase
always @ (posedge clk)
case (cntr)
//0,1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,34 :
34,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,33 :adc_sclk<=1;
default adc_sclk<=0;
endcase
always @ (posedge clk)
case (cntr )
8: adc_res[11] <= adc_sdata ;
10:adc_res[10] <= adc_sdata ;
12:adc_res[9] <= adc_sdata ;
14:adc_res[8] <= adc_sdata ;
16:adc_res[7] <= adc_sdata ;
18:adc_res[6] <= adc_sdata ;
20:adc_res[5] <= adc_sdata ;
22:adc_res[4] <= adc_sdata ;
24:adc_res[3] <= adc_sdata ;
26:adc_res[2] <= adc_sdata ;
28:adc_res[1] <= adc_sdata ;
30:adc_res[0] <= adc_sdata ;
endcase
always @ (posedge clk)adc_valid <= cntr == 32 ;
endmodule
上述**信手拈來,沒有編譯可能存在筆誤。
這裡用到了乙個adc_valid來採集的資料已經更新了,可以用來做下游資料控制的寫訊號。
我們看到根據時序來構造控制邏輯是很簡單的,讀者可以列印下時序圖,之後用筆在上面畫畫,確定一下計數器的分配,思路明細之後就可以程式設計了。
這裡思路其實是狀態機,但是有由於幾乎沒有輸入訊號控制狀態的轉移,實際上也就成了計數器。於是設定乙個主計數器迴圈運轉,其他always塊根據當前計數器數值決定自己具體做點什麼。
資料結構(1) 使用物件導向模擬陣列
陣列是一種常用的資料結構,陣列具有不可變性,建立後的陣列的長度固定,通過索引訪問陣列中的元素,訪問速度快,刪除新增效率低。通過物件導向模擬陣列,模擬的陣列具有以下功能 新增新元素 展示查詢元素所在位置 根據索引獲取元素 根據索引刪除元素 修改指定位置的元素 同時使用兩個演算法對陣列進行操作 有序新增...
python實現模擬數字的魔術遊戲
在遊戲中,魔術師要每位觀眾心裡想乙個三位數abc a b c分別是百位 十位和個位數字 然後魔術師讓觀眾心中記下acb bac bca cab cba五個數以及這5個數的和值。只要觀眾說出這個和是多少,則魔術師一定能猜出觀眾心裡想的原數abc是多少。例如,觀眾甲說他計算的和值是1999,則魔術師立即...
localstorage模擬資料庫的簡化版本
使用localstorage模擬乙個資料庫的操作 簡化版本 localstorage的每一項就是模擬的每一張二維表 目前僅支援cmd規範,vue等前端框架可以自己對下面的 做一些修改.function window json字串轉化為物件 function json2obj jsonstr retu...