当前位置: 首页 > news >正文

湖北网站建设哪家专业北京爱空间装修公司

湖北网站建设哪家专业,北京爱空间装修公司,wordpress all in one,凡科 wordpress一、基本知识 SDRAM : 即同步动态随机存储器#xff08;Synchronous Dynamic Random Access Memory#xff09;, 同步是指其时钟频率与对应控制器#xff08;CPU/FPGA#xff09;的系统时钟频率相同#xff0c;并且内部命令 的发送与数据传输都是以该时钟为基准#xff…一、基本知识 SDRAM : 即同步动态随机存储器Synchronous Dynamic Random Access Memory, 同步是指其时钟频率与对应控制器CPU/FPGA的系统时钟频率相同并且内部命令 的发送与数据传输都是以该时钟为基准动态是指存储阵列需要不断的刷新来保证数据不丢失随机指数据的读取和写入可以随机指定地址而不是必须按照严格的线性次序变化。 SDRAM 使用电容的电荷存储特性存储数据而 SRAM使用CMOS晶体管存储数据这决定了SDRAM的运行功耗要远远低于SRAM。由于使用晶体管存储数据要能够正确的存储一位数据需要最少6个晶体管。因此从芯片面积上来说单片SRAM芯片的容量不可能做到很高。 通常情况下SDRAM 是拥有四个 BANK 的动态刷新存储器存储器工作在 3.3V 的电 压下拥有一个同步接口SDRAM 的所有信号都在时钟信号的上升沿被寄存。对于 SDRAM 的读写是以突发的方式进行的对 sdram 的获取读或者写是从一个指定的地址开始并按照编程好的数量(长度)的地址以编程好的数据顺序读写数据。 存取原理先通过行地址打开行地址线后通过列地址线打开列地址便实现把电容与数据线连通实现读/写操作。 打开行地址需要tRCD时间后才能打开列地址。tRCD可查手册计算需要多少个对应频率的时钟的延迟进行设计。 打开列地址后如果是读操作需要CLCAS READ LATENCY个时钟周期才会出数据如果是写操作则数据需要同时送出不用CL。 不同型号的sdram命令、时序参数有区别 二、型号MT48LC16M16A2的sdram 引脚 对于sdram的控制通过CS_N、RAS_N、CAS_N、WE_N四个引脚来控制故记这四个引脚组成的状态为控制命令cmd。 通过这个表来设置cmd。 1.时序设计 控制sdram只需要结合时序图和命令表通过线性序列机和状态机来设计就可以。 1.上电初始化通过计数器使sdram处于nop状态 不少于100us后发出一个precharge命令经过tRP时间一直处于nop下同发出一个autorefresh命令经过tRFC时间再autorefresh一次经过tRFC时间便可发出load mode register命令配置模式寄存器。 模式寄存器设置规则如下 2.读/写命令 器件手册给出了包括读/写在内的多种命令的时序图根据时序图进行设计即可比如常用的 2.代码设计 类似IIC协议和SPI协议依旧是状态机加线性序列机的形式来是实现。最底层用状态机实现每种状态需要的操作中间层用线性序列机实现一个完整的读/写/其他操作需要经过几种状态的跳转。故先定义状态和命令cmd。 注意设计时仍然需要注意时钟问题给sdram的时钟是在上升沿读取数据所以输出的数据在上升沿应该是稳定的具体可以通过设计与读写两个时钟的移相来实现。 module sdram_driver(input clk ,input rst_n ,input write_sig ,input read_sig ,input initial_sig ,input [12:0]write_addr ,input [1:0]write_bank ,input [12:0]read_addr ,input [1:0]read_bank ,output reg [3:0]cmd ,output reg [1:0]bank ,output reg [12:0]addr ,output reg [11:0]mode ,output reg cke_ctrl ,output reg [1:0]dqm_ctrl ,output reg initial_done ,output reg [15:0]read_data ,output reg trans_done ,inout [15:0]DQ );//状态参数 localparam nop1 4b1000 ; //空闲态:禁止命令 localparam nop2 4b0111 ; //空闲态空命令 localparam active 4b0011 ; //选bank与行 localparam read 4b0101 ; //选bank和列启动突发读 最后一位为屏蔽位 localparam write 4b0100 ; //选bank和列启动突发读 最后一位为屏蔽位 localparam burst_terminate 4b0110 ; //突发中止 localparam precharge 4b0010 ; //关闭行预充电 localparam refresh 4b0001 ; //刷新 localparam load_mode_register 4b0000 ; //a0 - a11 tmrd// mode register localparam M9_BL_mode 1b0 ; //length localparam M9_SL_mode 1b1 ; //single localparam M87_SO_mode 2b00 ; localparam M654_CAS_2 3b010 ;//CL localparam M654_CAS_3 3b011 ;//CL localparam M3_seq 1b0 ; localparam M3_intl 1b1 ; localparam M210_BL_1 3b000 ;//be able to replace single read/write (M9) localparam M210_BL_2 3b001 ; localparam M210_BL_4 3b010 ; localparam M210_BL_8 3b011 ; localparam M210_BL_full 3b111 ;// read with auto precharge ? localparam auto_precharge 1 ; wire rd_with_auto , wr_with_auto ; assign rd_with_auto auto_precharge ; assign wr_with_auto auto_precharge ;reg [15:0]cmd_cnt ; always( posedge clk or negedge rst_n ) if(!rst_n)begincmd_cnt 0 ;cmd nop2 ;bank 0 ;addr 0 ;mode 0 ;cke_ctrl 0 ;dqm_ctrl 0 ; trans_done 0 ;initial_done 0 ;read_data 0 ;end else if(initial_sig)begincmd_cnt cmd_cnt 1 ;case(cmd_cnt)1:cmd nop2 ;//delay 100 us10005: begin cke_ctrl 1 ; end10010: begin cmd precharge ; addr[10] 1 ; end //precharge all banks : tRP 20ns (2T)10011: begin cmd nop2 ; end10015: begin cmd refresh ; cke_ctrl 1 ; end //auto refresh : 2T(RFC) ; T(RFC) 66ns 1T(auto)(256Mb) 819210016: begin cmd nop2 ; end10026: begin cmd refresh ; cke_ctrl 1 ; end // 10027: begin cmd nop2 ; end // 10040: begin cmd load_mode_register ; bank 0 ; mode { 2b00 , M9_BL_mode , M87_SO_mode , M654_CAS_3 , M3_seq , M210_BL_4 } ;end //set mode :t(mrd) 2t(ck) 2*6 12 ns10041: begin cmd nop2 ; end10045: begin initial_done 1 ; end10046: begin cmd_cnt 0 ; enddefault:cmd nop2 ; endcaseend else if(initial_done)beginif(write_sig)beginif(wr_with_auto)begincmd_cnt cmd_cnt 1 ;case(cmd_cnt)1:begin cmd active ; bank write_bank ; addr write_addr ; end4:begin cmd write ; bank write_bank ; addr {write_addr[12:11],1b1,write_addr[9:0]}; end10:begin trans_done 1 ; cmd_cnt 0 ;enddefault:cmdnop2;endcaseendelse if(~wr_with_auto)begincmd_cnt cmd_cnt 1 ;case(cmd_cnt)1:begin cmd active ; bank write_bank ; addr write_addr ; end4:begin cmd write ; bank write_bank ; addr {write_addr[12:11],1b1,write_addr[9:0]}; end9:begin cmd precharge ; addr[10] 1 ;end12:begin trans_done 1 ; cmd_cnt 0 ;enddefault:cmdnop2;endcaseend endelse if(read_sig)beginif( rd_with_auto )begincmd_cnt cmd_cnt 1 ;case(cmd_cnt)1:begin cmd active ; bank read_bank ; addr read_addr ; end4:begin cmd read ; bank read_bank ; addr {read_addr[12:11],1b1,read_addr[9:0]}; end //addr10 control auto charge9:begin read_data DQ ; end10:begin read_data DQ ; end11:begin read_data DQ ; end12:begin read_data DQ ; end13:begin trans_done 1 ; cmd_cnt 0 ; enddefault:begin cmd nop2 ;read_data DQ ;endendcaseendelse if( ~rd_with_auto )begincmd_cnt cmd_cnt 1 ;case(cmd_cnt)1:begin cmd active ; bank read_bank ; addr read_addr ; end4:begin cmd read ; bank read_bank ; addr {read_addr[12:11],1b0,read_addr[9:0]}; end //addr10: control auto charge9:begin read_data DQ ; end10:begin read_data DQ ; end11:begin read_data DQ ; cmd precharge ; addr[10] 1 ; end //precharge12:begin read_data DQ ; end14:begin trans_done 1 ; cmd_cnt 0 ; enddefault:cmd nop2 ;endcaseendendelsebegincmd nop2 ;cmd_cnt 0 ;trans_done 0 ;endend elsebegincmd_cnt 0 ;endendmodule //-75 100MHz CL 2 setup 1.5 hold 0.8 上升沿读写数据// // 100MHz : T 10ns // // tRP 20ns T(RFC) 66ns ; t(mrd) 12 ns // 这里实现 普通的写和读 有特殊要求的根据手册进行cmd修改即可module sdram_ctrl(input fpga_clk ,input rst_n ,input write_sig ,input read_sig ,input [12:0]write_addr ,input [1:0]write_bank ,input [15:0]write_data ,input [12:0]read_addr ,input [1:0]read_bank , output trans_done ,output [15:0]read_data ,output sclk ,output CKE ,output CS_N ,output RAS_N ,output CAS_N ,output WE_N ,output [1:0]DQM ,//高电平时屏蔽output [12:0]SA ,//A12 - A0output [1:0]BA ,inout [15:0]DQ );wire clk_100m; wire clk_100m_90shift ; pll pll_inst(.inclk0(fpga_clk),.c0(clk_100m),.c1(clk_100m_90shift)); assign sclk clk_100m_90shift ;//read / write signal catch reg write_sig_reg ; always(posedge fpga_clk or negedge rst_n) if(!rst_n)write_sig_reg 0 ; elsewrite_sig_reg write_sig ;reg read_sig_reg ; always(posedge fpga_clk or negedge rst_n) if(!rst_n)read_sig_reg 0 ; else read_sig_reg read_sig ;reg write_signal ; reg read_signal ; always(posedge fpga_clk or negedge rst_n) if(!rst_n)write_signal 0 ; else if( write_sig (!write_sig_reg ) )write_signal 1 ; else if(trans_done)write_signal 0 ;always(posedge fpga_clk or negedge rst_n) if(!rst_n)read_signal 0 ; else if( read_sig (!read_sig_reg ) )read_signal 1 ; else if(trans_done)read_signal 0 ; // initial sdram reg [5:0]initial_cnt ; wire initial_done ; always(posedge clk_100m or negedge rst_n) if(!rst_n)initial_cnt 0 ; else if( initial_cnt 50 )initial_cnt initial_cnt 1 ; elseinitial_cnt initial_cnt ;reg initial_sig ; always(posedge clk_100m or negedge rst_n) if(!rst_n)initial_sig 0 ; else if(initial_cnt 48)initial_sig 1 ; else if(initial_done)initial_sig 0 ;wire [3:0]cmd ; wire [1:0]bank ; wire [12:0]addr ; wire [11:0]mode ; wire cke_ctrl ; wire [1:0]dqm_ctrl ; sdram_driver sdram_driver_inst(.clk(clk_100m) ,.rst_n(rst_n) ,.write_sig(write_signal) ,.read_sig(read_signal) ,.initial_sig(initial_sig),.write_addr(write_addr) ,.write_bank(write_bank) ,.read_addr(read_addr) ,.read_bank(read_bank) ,.cmd(cmd) ,.bank(bank) ,.addr(addr) ,.mode(mode) ,.cke_ctrl(cke_ctrl) ,.dqm_ctrl(dqm_ctrl) ,.initial_done(initial_done),.read_data(read_data) ,.trans_done(trans_done) ,.DQ(DQ) ); sdram_underlying_logic sdram_underlying_logic_inst(.clk(clk_100m) ,.rst_n(rst_n) ,.mode(mode),//A11 -A0.cmd(cmd) ,.cke_ctrl(cke_ctrl) ,.bank(bank) ,.addr(addr) ,.write_data(write_data) ,.dqm_ctrl(dqm_ctrl),.CKE(CKE) ,.CS_N(CS_N) ,.RAS_N(RAS_N) ,.CAS_N(CAS_N) ,.WE_N(WE_N) ,.DQM(DQM) ,//高电平时屏蔽.SA(SA) ,//A12 - A0.BA(BA) ,.DQ(DQ) );endmodule module sdram_underlying_logic(input clk ,input rst_n ,input [11:0]mode,//A11 -A0input [3:0]cmd ,input cke_ctrl ,input [1:0]bank ,input [12:0]addr ,input [15:0]write_data ,input [1:0]dqm_ctrl,output reg CKE ,output reg CS_N ,output reg RAS_N ,output reg CAS_N ,output reg WE_N ,output reg[1:0]DQM ,//高电平时屏蔽output reg[12:0]SA ,//A12 - A0output reg [1:0]BA ,inout [15:0]DQ );reg DQ_ctrl ; reg [15:0]DQ_out ; assign DQ (DQ_ctrl ? DQ_out : 16hzzzz) ;/////状态参数 localparam nop1 10b1000000000 ; //空闲态:禁止命令 localparam nop2 10b0100000000 ; //空闲态空命令 localparam active 10b0010000000 ; //选bank与行 localparam read 10b0001000000 ; //选bank和列启动突发读 最后一位为屏蔽位 localparam write 10b0000100000 ; //选bank和列启动突发读 最后一位为屏蔽位 localparam burst_terminate 10b0000010000 ; //突发中止 localparam precharge 10b0000001000 ; //关闭行预充电 localparam auto_refresh 10b0000000100 ; //自动刷新 localparam self_refresh 10b0000000010 ; //自刷新 localparam load_mode_register 10b0000000001 ; //加载模式寄存器reg [9:0]state ;//状态机 always(posedge clk or negedge rst_n) if(!rst_n)state nop2 ; else if( cmd[3] )state nop1 ; else if( cmd 4b0111 )state nop2 ; else if( cmd 4b0011 )state active ; else if( cmd 4b0101 )state read ; else if( cmd 4b0100 )state write ; else if( cmd 4b0110 )state burst_terminate ; else if( cmd 4b0010 )state precharge ; else if( cmd 4b0001 )beginif(cke_ctrl)state auto_refresh ;elsestate self_refresh ;end else if( cmd 4b0000 )state load_mode_register ;reg [7:0]state_cnt ; always(posedge clk or negedge rst_n) if(!rst_n)beginstate_cnt 0 ;CKE 1 ;CS_N 1 ;RAS_N 1 ;CAS_N 1 ;WE_N 1 ;BA 0 ;SA 0 ;DQM 0 ;DQ_ctrl 1 ;//获取数据线的控制权DQ_out 0 ;end else begincase(state)nop1 : begin CS_N 1 ; endnop2 : begin CS_N 0 ; RAS_N 1 ; CAS_N 1 ; WE_N 1 ; DQ_out write_data ;endactive: begin CS_N 0 ; RAS_N 0 ; CAS_N 1 ; WE_N 1 ; SA addr ; BA bank ;end read : begin CS_N 0 ; RAS_N 1 ; CAS_N 0 ; WE_N 1 ; SA addr ; BA bank ; DQM dqm_ctrl ; DQ_ctrl 0 ; endwrite : begin CS_N 0 ; RAS_N 1 ; CAS_N 0 ; WE_N 0 ; SA addr ; BA bank ; DQM dqm_ctrl ; DQ_out write_data ;endprecharge : begin CS_N 0 ; RAS_N 0 ; CAS_N 1 ; WE_N 0 ; SA[10] addr[10] ; BA bank ;DQ_ctrl 1 ; end//sa[10] 1 :对所有bank预充电 ; sa[10] 0 : 对ba1 ba0 选中的bank预充电auto_refresh : begin CS_N 0 ; RAS_N 0 ; CAS_N 0 ; WE_N 1 ; CKE 1 ; endself_refresh : begin CS_N 0 ; RAS_N 0 ; CAS_N 0 ; WE_N 1 ; CKE 0 ; endload_mode_register : begin CS_N 0 ; RAS_N 0 ; CAS_N 0 ; WE_N 0 ; SA { 1b0 , mode } ; enddefault:;endcaseendendmodule timescale 1ns/1ns module sdram_ctrl_tb();reg fpga_clk ; reg rst_n ; reg write_sig ; reg read_sig ; reg [12:0]write_addr ; reg [1:0] write_bank ; reg [15:0]write_data ; reg [12:0]read_addr ; reg [1:0] read_bank ; wire sclk ; wire CKE ; wire CS_N ; wire RAS_N ; wire CAS_N ; wire WE_N ; wire [1:0]DQM ;//高电平时屏蔽 wire [12:0]SA ;//A12 - A0 wire [1:0]BA ; wire [15:0]DQ; wire [15:0]read_data; wire trans_done; wire [3:0]cmd_state ; sdram_ctrl sdram_ctrl_inst(.fpga_clk(fpga_clk) ,.rst_n(rst_n) ,.write_sig(write_sig) ,.read_sig(read_sig) ,.write_addr(write_addr) ,.write_bank(write_bank) ,.write_data(write_data) ,.read_addr(read_addr) ,.read_bank(read_bank) , .trans_done(trans_done) ,.read_data(read_data) ,.sclk(sclk) ,.CKE(CKE) ,.CS_N(CS_N) ,.RAS_N(RAS_N) ,.CAS_N(CAS_N) ,.WE_N(WE_N) ,.DQM(DQM) ,.SA(SA) ,.BA(BA) ,.DQ(DQ) );mt48lc16m16a2 mt48lc16m16a2_inst(.Dq(DQ),.Addr(SA),.Ba(BA),.Clk(sclk),.Cke(CKE),.Cs_n(CS_N),.Ras_n(RAS_N),.Cas_n(CAS_N),.We_n(WE_N),.Dqm(DQM) );pulldown(DQ[15]); pulldown(DQ[14]); pulldown(DQ[13]); pulldown(DQ[12]); pulldown(DQ[11]); pulldown(DQ[10]); pulldown(DQ[9]); pulldown(DQ[8]); pulldown(DQ[7]); pulldown(DQ[6]); pulldown(DQ[5]); pulldown(DQ[4]); pulldown(DQ[3]); pulldown(DQ[2]); pulldown(DQ[1]); pulldown(DQ[0]); assign cmd_state {CS_N,RAS_N,CAS_N,WE_N} ;initial fpga_clk 0 ; always #10 fpga_clk !fpga_clk ; initial beginrst_n 0 ;write_sig 0 ;read_sig 0 ;write_addr 0 ;write_bank 0 ;write_data 0 ;read_addr 0 ;read_bank 0 ;#201 ;rst_n 1 ;#102000;#200 ;write_addr 13d2 ;write_bank 2d1;write_data 16h5a5a ;write_sig 1;#70;write_data 16h5a5b ;#10;write_data 16h5a5c ;#10;write_data 16h5a5d ;#200 ;write_sig 0;#5000;read_addr 13d2 ;read_bank 2d1;read_sig 1 ;#200 ;read_sig 0 ;#10000;$stop ;endendmodule 3.仿真 1.上点初始化 2.写数据带自动预充电 3.读数据带自动预充电 读出来的数据DQ的最后一个数据只有7.6ns不知道是什么原因。 但是移相适当仍然可以读取。 接下来对AC609板载的SDRAMw9812g6kh进行设计并进行板级验证。 三、型号w9812g6kh的sdram 通过查看w9812g6kh芯片的器件手册发现它的读/写/充电/等命令设置均与MT48LC16M16A2的规则相同只是这两个芯片容量不一样w9812g6kh为128M只有12个地址引脚而MT48LC16M16A2为256M有13个地址引脚。所以程序上只需要修改地址引脚即可。 为了上板验证程序的可行性仿照IIC协议的测试方法用uart-sdram联合测试通过上位机发送读写数据来控制FPGA对w9812g6kh进行读写此处仍需要建立通信帧规则与IIC协议笔记差不多如下 //***************** ******************// //        串口波特率115200           // //            通信帧格式             // //      AA AA HA LA RW DA DA 55      // //    其中AA AA 为帧头55为帧尾   // //   HA、LA为存储器地址  // //   RW为读写控制读5A ;写A5      // //   DA为要写入的数据读的时候可为任意值 // // ********************************* // sdram的控制程序设置为BL1的模式使用其他BL只需修改对应的线性序列机和模式寄存器即可 1.代码设计 //***************** ******************// // 串口波特率115200 // // 通信帧格式 // // AA AA HA LA RW DA DA 55 // // 其中AA AA 为帧头55为帧尾 // // HA、LA为存储器地址 // // RW为读写控制读5A ;写A5 // // DA为要写入的数据读的时候可为任意值 // // ********************************* //module uart_sdram(input fpga_clk ,input rst_n ,input uart_rx ,output rx_done ,output uart_tx ,output sclk ,output CKE ,output CS_N ,output RAS_N ,output CAS_N ,output WE_N ,output [1:0]DQM ,//高电平时屏蔽output [11:0]SA ,//A12 - A0output [1:0]BA ,inout [15:0]DQ);//receive uart data //wire rx_done ; wire [7:0]rx_data ; uart_receive uart_rec_inst(.clk(fpga_clk) ,.reset(rst_n) ,.baud_rate(d5) ,//115200.uart_rx(uart_rx), .data(rx_data) ,.rx_done(rx_done) );//Shift register reg [7:0]rec_shift_reg[7:0] ; reg rw_flag ; wire trans_done ; always(posedge fpga_clk or negedge rst_n) if(!rst_n)beginrec_shift_reg[0] 0 ;rec_shift_reg[1] 0 ;rec_shift_reg[2] 0 ;rec_shift_reg[3] 0 ;rec_shift_reg[4] 0 ;rec_shift_reg[5] 0 ;rec_shift_reg[6] 0 ;rec_shift_reg[7] 0 ;rw_flag 0 ;end else if(rx_done)beginrec_shift_reg[0] rec_shift_reg[1] ;rec_shift_reg[1] rec_shift_reg[2] ;rec_shift_reg[2] rec_shift_reg[3] ; rec_shift_reg[3] rec_shift_reg[4] ; rec_shift_reg[4] rec_shift_reg[5] ; rec_shift_reg[5] rec_shift_reg[6] ; rec_shift_reg[6] rec_shift_reg[7] ; rec_shift_reg[7] rx_data ; rw_flag 1 ;end else if(trans_done)rw_flag 0 ;reg [15:0]write_addr ; reg [15:0]read_addr ; reg [15:0]write_data ; reg [15:0]read_data ; wire [15:0]rd_data ; reg write_pulse ; reg read_pulse ;sdram_ctrl sdram_ctrl_inst(.fpga_clk(fpga_clk) ,.rst_n(rst_n) ,.write_sig(write_pulse) ,.read_sig(read_pulse) ,.write_addr(write_addr[11:0]) ,.write_bank(write_addr[15:14]) ,.write_data(write_data) ,.read_addr(read_addr[11:0]) ,.read_bank(read_addr[15:14]) , .trans_done(trans_done) ,.read_data(rd_data) ,.sclk(sclk) ,.CKE(CKE) ,.CS_N(CS_N) ,.RAS_N(RAS_N) ,.CAS_N(CAS_N) ,.WE_N(WE_N) ,.DQM(DQM) ,//高电平时屏蔽.SA(SA) ,//A12 - A0.BA(BA) ,.DQ(DQ) );wire uart_send_done ; reg uart_send_en ; uart_send uart_send( .clk(fpga_clk),.reset(rst_n),.data(read_data[7:0]),.send_en(uart_send_en),.baud_rate(5),//115200.uart_tx(uart_tx),.tx_done(uart_send_done) );//Parsing frames localparam frames_header 8hAA ; localparam frames_tail 8h55 ; localparam read_option 8h5A ; localparam write_option 8hA5 ; reg [15:0]wr_cnt ; reg [15:0]rd_cnt ; always(posedge fpga_clk or negedge rst_n) if(!rst_n)beginwrite_addr 0 ;read_addr 0 ;write_data 0;read_data 0 ;write_pulse 0 ;read_pulse 0 ;wr_cnt 0 ;rd_cnt 0 ;endelse if( rw_flag )beginif ( (rec_shift_reg[0] frames_header) (rec_shift_reg[1] frames_header) (rec_shift_reg[7] frames_tail) )beginif(rec_shift_reg[4] write_option )beginwrite_addr { rec_shift_reg[2] , rec_shift_reg[3] } ;write_data {rec_shift_reg[5],rec_shift_reg[6]} ;wr_cnt wr_cnt 1 ;//write signalif( wr_cnt 3 )write_pulse 1 ;else if(trans_done)beginwr_cnt 0 ;end elsewrite_pulse 0 ; endelse if ( rec_shift_reg[4] read_option )beginread_addr { rec_shift_reg[2] , rec_shift_reg[3] } ;//read signalrd_cnt rd_cnt 1 ;if(trans_done)beginread_data rd_data ;read_pulse 0 ;rd_cnt 0 ;endelse if(rd_cnt 3)read_pulse 1 ;elseread_pulse 0 ;endendend elsebeginwrite_pulse 0 ;read_pulse 0 ;wr_cnt 0 ;rd_cnt 0 ;endalways(posedge fpga_clk or negedge rst_n) if(!rst_n)uart_send_en 0 ; else if(trans_done (rec_shift_reg[4] read_option) )uart_send_en 1 ; else if(uart_send_done)uart_send_en 0 ;endmodule 2.板级验证 fpga向sdram芯片写入数据16‘h1234并返回低位8’h34。
文章转载自:
http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn
http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn
http://www.morning.bsplf.cn.gov.cn.bsplf.cn
http://www.morning.wqnc.cn.gov.cn.wqnc.cn
http://www.morning.ngkgy.cn.gov.cn.ngkgy.cn
http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn
http://www.morning.zmbzl.cn.gov.cn.zmbzl.cn
http://www.morning.rxkl.cn.gov.cn.rxkl.cn
http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn
http://www.morning.qgdsd.cn.gov.cn.qgdsd.cn
http://www.morning.hxftm.cn.gov.cn.hxftm.cn
http://www.morning.bpmdq.cn.gov.cn.bpmdq.cn
http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn
http://www.morning.lwtld.cn.gov.cn.lwtld.cn
http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn
http://www.morning.qpsft.cn.gov.cn.qpsft.cn
http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn
http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn
http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn
http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn
http://www.morning.bpmz.cn.gov.cn.bpmz.cn
http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn
http://www.morning.dwfxl.cn.gov.cn.dwfxl.cn
http://www.morning.fgsct.cn.gov.cn.fgsct.cn
http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn
http://www.morning.c7623.cn.gov.cn.c7623.cn
http://www.morning.jxltk.cn.gov.cn.jxltk.cn
http://www.morning.rjkfj.cn.gov.cn.rjkfj.cn
http://www.morning.lpgw.cn.gov.cn.lpgw.cn
http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn
http://www.morning.lssfd.cn.gov.cn.lssfd.cn
http://www.morning.kqqk.cn.gov.cn.kqqk.cn
http://www.morning.sqfnx.cn.gov.cn.sqfnx.cn
http://www.morning.ffksr.cn.gov.cn.ffksr.cn
http://www.morning.dzqyn.cn.gov.cn.dzqyn.cn
http://www.morning.ypklb.cn.gov.cn.ypklb.cn
http://www.morning.ckntb.cn.gov.cn.ckntb.cn
http://www.morning.wnhgb.cn.gov.cn.wnhgb.cn
http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn
http://www.morning.kgslc.cn.gov.cn.kgslc.cn
http://www.morning.fswml.cn.gov.cn.fswml.cn
http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn
http://www.morning.fwcnx.cn.gov.cn.fwcnx.cn
http://www.morning.qwbtr.cn.gov.cn.qwbtr.cn
http://www.morning.gbyng.cn.gov.cn.gbyng.cn
http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn
http://www.morning.ummpdl.cn.gov.cn.ummpdl.cn
http://www.morning.flqbg.cn.gov.cn.flqbg.cn
http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn
http://www.morning.nswcw.cn.gov.cn.nswcw.cn
http://www.morning.llthz.cn.gov.cn.llthz.cn
http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn
http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn
http://www.morning.ryjl.cn.gov.cn.ryjl.cn
http://www.morning.ejknty.cn.gov.cn.ejknty.cn
http://www.morning.jxscp.cn.gov.cn.jxscp.cn
http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn
http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn
http://www.morning.rkzb.cn.gov.cn.rkzb.cn
http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn
http://www.morning.mnslh.cn.gov.cn.mnslh.cn
http://www.morning.fkgqn.cn.gov.cn.fkgqn.cn
http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn
http://www.morning.skkmz.cn.gov.cn.skkmz.cn
http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn
http://www.morning.zdgp.cn.gov.cn.zdgp.cn
http://www.morning.gydsg.cn.gov.cn.gydsg.cn
http://www.morning.qgfkn.cn.gov.cn.qgfkn.cn
http://www.morning.klwxh.cn.gov.cn.klwxh.cn
http://www.morning.rwqj.cn.gov.cn.rwqj.cn
http://www.morning.qwbls.cn.gov.cn.qwbls.cn
http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn
http://www.morning.bqts.cn.gov.cn.bqts.cn
http://www.morning.lthtp.cn.gov.cn.lthtp.cn
http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn
http://www.morning.yqfdl.cn.gov.cn.yqfdl.cn
http://www.morning.xkzr.cn.gov.cn.xkzr.cn
http://www.morning.fplwz.cn.gov.cn.fplwz.cn
http://www.morning.qscsy.cn.gov.cn.qscsy.cn
http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn
http://www.tj-hxxt.cn/news/280472.html

相关文章:

  • 网站域名续费简单的网站后台管理系统
  • 网站设计怎么做好广告设计与制作的公司
  • 怎么查找网站建设中文域名.网站
  • 网站开发者技术网站网站建设需要到哪些知识
  • 企业网站报价网站有什么功能
  • 云阳有没有做网站的百度 网站改版了
  • 支付网站招聘费分录怎么做大型网站建设公司排名
  • 大连手机自适应网站建设服务wordpress评论通知
  • 网站关键词快排名xyz溢价域名最好的网站
  • 昆山建设监察网站西安汇友网站建设
  • 中国做出口的网站平台网站seo的关键词排名怎么做的
  • 怎么制作网站应用360免费建站网页链接
  • 网站因为备案关闭了 怎么办企业网站开发标准
  • cms 企业网站广州app开发费用
  • 京东网站建设的经费预算关于医院要求建设网站的请示
  • 高校网站群建设方案wordpress棋牌模板
  • 高淳哪家做网站不错设计类专业考研考什么
  • 设计专业网站有哪些开发网站现实网络传输失败
  • 建网站卖产品交互式网站设计 深圳
  • 如何给公司网站做推广net淘宝网站开发的例子
  • 管理网站开发怎么建设一个企业网站
  • 国外室内设计案例网站北京网页设计公司
  • 网站开发设计步骤做个商城网站怎么做便宜
  • 合肥哪里有建站公司开发公司绩效考核
  • 专门做孩子早教的网站巴南网站建设哪家好
  • 郑州做网站狼牙网站添加内容
  • 制作网站后台教程最好网站建设公司运营团队
  • 哪里有制作网站服务建设网站怎么建立服务器
  • 手机端网站的区别wordpress分类添加关键词
  • 大庆市建设网站建设网站范文