?? spi_communication.v
字號:
/*spi和cpld之間的通信模塊,還要控制da轉換模塊*/module spi_communication( mosi0, /*單片機控制spi輸入*/ ssel_w, /*write module select*/ ssel_c, /*控制命令輸入*/ ssel_r, /*read module select*/ clk0, /*單片機時鐘控制*/ clk1, /*cpld時鐘控制*/ wave_out, /*da輸入,讀出波形數據*/ am_control, /*da幅度控制*/ address_control, /*地址指針控制*/ data, /*ram的輸入輸出數據端口*/ read, /*讀控制*/ write /*寫控制*/ ); output write,read;output [7:0] am_control, wave_out;output [31:0] address_control; inout [7:0] data; wire [7:0] data;reg write,read;reg [7:0] am_control, wave_out; reg [31:0] address_control, frequ_control; /*頻率控制即步進量控制*/reg [7:0] counter;reg [2:0] one_byte;reg [7:0] data_buf;reg [31:0] addr_t;wire[31:0] addr;input mosi0, ssel_w, ssel_c, ssel_r, clk0, clk1;always@(posedge clk0) begin counter<=0; /*記數初始化*/ one_byte<=0; if(ssel_w) /*選擇寫入*/ begin read<=1'b0; data_buf[7:0]<={data_buf[6:0],mosi0}; one_byte<=one_byte+3'b001; if(one_byte==0) /*夠一個字節了,寫入ram*/ write<=1'b1; else write<=1'b0; end else if(ssel_c) /*選擇寫入控制命令*/ begin counter<=counter+1; if(counter<=7) am_control[7:0]<={am_control[6:0],mosi0}; /*首先輸入的是幅度控制*/ else if(counter<=39) addr_t[31:0]<={addr_t[30:0],mosi0}; /*地址指針*/ else if(counter<=71) frequ_control[31:0]<={frequ_control[30:0],mosi0}; /*頻率控制字*/ end else if(ssel_r) begin read<=1'b1; /*初始化*/ write<=1'b0; end endassign data= (ssel_w)? data_buf : 8'hzz;assign addr = read? (addr_t+frequ_control) : 0; always@(posedge clk1)begin if(read==1) begin wave_out<=data; /*讀出的波形數據*/ address_control <= addr; /*頻率控制*/ endendendmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -