之前寫dds那部分時,對於spi介面琢磨了好久,當然了,首先想得到的狀態機,控制dds輸出的資料送至後端da。將整個資料傳輸過程分解成四個狀態: idle、wr_start、wr_data、stop,根據事件猝發每個狀態的跳轉,例如idle -> wr_start的跳轉條件是out_en = 1,這種設計思想是最直接的,但有的時候時序調整很麻煩(比如多了或少了時鐘週期),直到某天,看了adi公司針對ad7960給的乙個demo,有了下面的一種思路:
資料傳輸一般是週期性的,我們可以根據資料傳輸的時序圖和時序規格表(一般都可在器件手冊上找到)計算好每個讀寫資料週期所需時鐘數,然後通過乙個時鐘計數器來控制資料讀寫的過程,比如計數值為a時,使能,計數值為b時,寫資料.....
附錄部分**:
assign data_rd_rdy_o = ((serial_read_done_s == 1'b1) && (adc_tcyc_cnt == 32'd4)) ? 1'b1 : 1'b0;
assign cnv_s = (adc_tcyc_cnt > 32'd17) ? 1'b1 : 1'b0;
assign tmsb_done_s = (adc_tcyc_cnt == 32'd18) ? 1'b1 : 1'b0; //last convert data msb is valid
assign buffer_reset_s = (adc_tcyc_cnt == 32'd2) ? 1'b1 : 1'b0;
assign data_out = (data_rd_rdy_o == 1'b1) ? data_o : data_out;
// update conversion timing counters
always @(posedge m_clk_i) begin
if(reset_n_i == 1'b0) adc_tcyc_cnt <= adc_cyc_cnt; //19~0: 200ns
else begin
if(adc_tcyc_cnt != 32'd0) adc_tcyc_cnt <= adc_tcyc_cnt - 32'd1;
else adc_tcyc_cnt <= adc_cyc_cnt;
endend
業務邏輯設計
1.action設計 shfwpgdzlbdmanager.copy mannager裡面的相應方法 shfwpgdzlbd.getbdtpid 傳入的引數從哪獲取,型別應和mannager的方法需要的引數型別相同 2.manager設計 設計之前宣告物件 private shfwpgdzlbdda...
分頁邏輯設計
分頁,是每乙個開發者必然會面臨的乙個問題。由於資料量大,不可能全部載入出來放置記憶體中,然後在頁面展示。這種方式的優點 1 簡單明瞭,邏輯清晰。2 實時查詢,資料準確。缺點 io次數太多,每次查詢都要請求兩次sql。增加db壓力 db資源很稀缺,而且每次查詢總記錄數是一次全表掃瞄,進行的是表級鎖 優...
德州撲克邏輯設計
德州撲克基本玩法 每個牌手發2張底牌,然後再依次發5張公共牌,每個牌手從手裡的2張和5張公共牌中,選出5張組合成最大的牌組,與 其他人進行輸贏比較。牌組大小規則 同花順 四條 葫蘆 同花 順子 三條 兩對 一對 單牌。德州撲克一共押四輪注 每人發2張牌後進行第一輪押注 發 3張公共牌後押第二輪注 發...