精华内容
下载资源
问答
  • SPI verilog

    2017-06-01 09:00:31
    verilog语言实现SPI的通信
  • verilog 实现SPI 传输功能。实现从机功能。已经仿真实现功能。
  • SPI verilog代码

    2018-04-02 17:50:19
    有非常详细的注释,可供参考!
  • spi verilog

    2014-03-20 11:09:46
    基于verilogSPI通信接口的代码
  • SPI通信协议,利用Verilog语言编写的SPI通信协议相关代码
  • 通过verilog编写语言实现读写操作SPI的flash芯片,经过验证可用,能够实现读取芯片DEVICE id Cyclone IV E系列的EP4CE10F17C8 W25Q128BV
  • 通过verilog实现ad的spi控制配置
  • 文档中包括了spi工作在从模式下的verilog代码,还有测试文件testbench文件。
  • spi_core verilog source code
  • Verilog语言来编写的32位spi,使用robei工具。
  • fpga spi Verilog程序

    2014-04-07 15:26:35
    fpga spi Verilog程序 非常实用,可直接编译
  • spi Verilog

    热门讨论 2013-10-29 18:54:18
    SPI 总线 代码 Verilog 读写 SPI接口的verilog实现 项目中使用的许多器件需要SPI接口进行配置,比如PLL:ADF4350,AD:AD9627,VGA:AD8372等,根据SPI协议,站长编写了一个简单的SPI读写程序,可以进行32为数据的...
  • SRAM和SPI verilog 模板 ,可自定义配置数据,频率在100M左右或更高
  • spi VERILOG 源码 testbench

    2021-09-16 16:34:14
    SPI verilog 源码 testbench
  • SPI verilog代码,已通过仿真与FPGA验证。可以集成在FPGA里面,迅速开发成品。 兄弟差积分,就顺手上传了一些项目资料。
  • spislave_spiverilog_spi工作在从模式下的verilog代码_源码.zip
  • spi verilog语言描述

    2011-03-10 15:43:57
    spi verilog语言描述 fpga应用
  • 基于fpga的spi master verilog代码
  • SPI接口的verilog实现

    2015-07-05 21:50:06
    verilog实现SPI的传输,包括RTL级源码和仿真文件等
  • 个人开发项目中使用到的spi接口模块设计,包含源代码及仿真工程,共享出来供大家交流学习。接口相对比较简答,采用四线制,主要涉及到数据接收发送过程中状态机控制转换及数据移位操作;模块仿真工具基于modelsim,...
  • SPI Slave接口 Verilog

    2014-07-17 22:57:20
    SPI Slave接口,实现与外部控制器的接口。实现外部SPI口到逻辑内部寄存器模块接口的转换
  • 该代码是基于Verilog对AD5664进行写数据,采用SPI总线方式对AD5664进行写数据。文件包含完整的工程,以及仿真。可直接使用。
  • 这个资源的SPI_salver部分主要来源于博客,我自己修改了一部分。SPI_master部分是我自己写的,同时添加了testbench文件,在vivado平台上仿真通过,K7硬件上也验证成功。建议先看我的博客再下载。
  • - Compatible with Motorola's SPI specifications - Enhanced Motorola MC68HC11 Serial Peripheral Interface - 4 entries deep read FIFO - 4 entries deep write FIFO - Interrupt generation after 1, 2, 3...
  • SPI总线 verilog代码

    千次阅读 2020-04-07 13:44:18
    SPI总线的构成及信号类型 SPI总线只需四条线(如图1所示)就可以完成MCU与各种外围器件的通讯: 1)MOSI– Master数据输出,Slave数据输入 2)MISO– Master数据输入,Slave数据输出 3)SCK – 时钟信号,由Master产生 4...

    SPI总线的构成及信号类型
    SPI总线只需四条线(如图1所示)就可以完成MCU与各种外围器件的通讯:
    1)MOSI – Master数据输出,Slave数据输入
    2)MISO – Master数据输入,Slave数据输出
    3)SCK  – 时钟信号,由Master产生
    4)/CS  – Slave使能信号,由Master控制。

    在一个SPI时钟周期内,会完成如下操作:

    1) Master通过MOSI线发送1位数据,同时Slave通过MOSI线读取这1位数据

    2) Slave通过MISO线发送1位数据,同时Master通过MISO线读取这1位数据

    Master和Slave各有一个移位寄存器,如图4所示,而且这两个移位寄存器连接成环状。依照SCK的变化,数据以MSB first的方式依次移出Master寄存器和Slave寄存器,并且依次移入Slave寄存器和Master寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。Master和Slave各有一个移位寄存器,如图4所示,而且这两个移位寄存器连接成环状。依照SCK的变化,数据以MSB first

     

    module spi(rst,clk, spics,spiclk,spido);

    input rst;//置位信号,低有效,复位要用计数器来产生,在FPGA里面产生

    input clk;//时钟信号

    output spics;//SPI片选信号,对于SPI来说是输出,对于FPGA来说是输入

    output spiclk;//SPI时钟信号,对于SPI来说是输出,对于FPGA来说是输入

    output spido;//SPI数据输出信号,对于SPI来说是输出,对于FPGA来说是输入

     

    module top(clk,spics,spiclk,spido,LDET,led);

    input clk;//时钟信号

    output spics;//SPI片选信号

    output spiclk;//SPI时钟信号

    output spido;//SPI数据输出信号

    input LDET;//是由SPI输入进来的寄存器配置信号,为1则说明已经配置好了

    output led;//从FPGA右边输出出去

    reg [4:0]cnt;//用于产生rst的计数器

    reg rst;//置位信号,低有效

    wire led;//链接出去的,但又不是内部输入输出。

     

    spi spi(//例化的是SPI,和前面的那个模块要一模一样

    .clk(clk),.rst(rst),.spiclk(spiclk),.spics(spics),.spido(spido));

     

    always@(posedge clk)

    begin

    if(cnt==5'd01) rst<=1'b1;

    else begin rst<=1'b0; cnt<=cnt+1'b1; end

    end

    assign led=LDET;//通过FPGA,将左边由SPI输入的LDET传给右边输出给led作为灯的信号

    endmodule

    展开全文
  • SPI Verilog HDL

    2019-07-30 11:36:40
    SPI Verilog HDL RTL 代码 /********************************************** time:2019.07.30 author: lion A version SPI001 *************************************************/ module spi( clk, rstn, rd, wr...

    SPI Verilog HDL

    RTL 代码

    /**********************************************
    time:2019.07.30
    author: lion A
    version SPI001
    *************************************************/
    
    module spi(
    clk,
    rstn,
    rd,
    wr,
    data_in,
    data_out,
    miso,
    mosi,
    spi_cs,
    spi_clk,
    wr_done,
    rd_done
    );
    
    
    input clk;//system clk 50MHZ
    input rstn;//active low
    input rd;
    input wr;
    input [7:0]data_in;
    input miso;
    
    output reg mosi;
    output reg [7:0]data_out;
    output spi_clk;
    output reg spi_cs;
    output wr_done;
    output rd_done;
    
    reg [2:0] send_cnt;
    reg [2:0] receive_cnt;
    
    reg wr_done_r,rd_done_r;
    
    assign spi_clk=clk;
    assign wr_done=(send_cnt==3'd7)?1:0;
    assign rd_done=(receive_cnt==3'd7)?1:0;
    
    wire spi_wr_en=wr&wr_done_r;
    wire spi_rd_en=rd&rd_done_r;
    
    /
    always@(posedge clk)
      if(!rstn)
        wr_done_r <=1'b0;
      else
        wr_done_r <=~wr_done;
    /
    always@(posedge clk)
      if(!rstn)
        rd_done_r <=1'b0;
      else
        rd_done_r <=~rd_done;
    	
    	
    
    always@(posedge clk)
      if(!rstn)
        begin send_cnt <=3'd0;spi_cs <=1'b1;end
      else if(spi_wr_en)
        begin
    	     case(send_cnt)
    		 3'd0:
    		     begin
    			      send_cnt <=3'd1;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[7];
    			 end
    		 3'd1:
    		     begin
    			      send_cnt <=3'd2;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[6];
    			 end
    		 3'd2:
    		     begin
    			      send_cnt <=3'd3;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[5];
    			 end
    		 3'd3:
    		     begin
    			      send_cnt <=3'd4;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[4];
    			 end
    		 3'd4:
    		     begin
    			      send_cnt <=3'd5;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[3];
    			 end
    		 3'd5:
    		     begin
    			      send_cnt <=3'd6;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[2];
    			 end
    		 3'd6:
    		     begin
    			      send_cnt <=3'd7;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[1];
    			 end
    		 3'd7:
    		     begin
    			      send_cnt <=3'd0;
    				  spi_cs   <=1'b0;
    				  mosi     <=data_in[0];
    			 end
            endcase			 
    	end
       else
        begin
    	     send_cnt <=3'd0;
    		 spi_cs <=1'b1;
    		 mosi <=1'b0;
    	end
    
    always@(posedge clk)
      if(!rstn)
        begin
    	receive_cnt <=3'd0;
    	spi_cs <=1'b1;
    	end
      else if(spi_rd_en)
        begin
    	     case(receive_cnt)
    		 3'd0:
    		     begin
    			      receive_cnt <=3'd1;
    				  spi_cs   <=1'b0;
    				  data_out[7] <=miso;
    			 end
    		 3'd1:
    		     begin
    			      receive_cnt <=3'd2;
    				  spi_cs   <=1'b0;
    				  data_out[6] <=miso;
    			 end
    		 3'd2:
    		     begin
    			      receive_cnt <=3'd3;
    				  spi_cs   <=1'b0;
    				  data_out[5] <=miso;
    			 end
    		 3'd3:
    		     begin
    			      receive_cnt <=3'd4;
    				  spi_cs   <=1'b0;
    				  data_out[4] <=miso;
    			 end
    		 3'd4:
    		     begin
    			      receive_cnt <=3'd5;
    				  spi_cs   <=1'b0;
    				  data_out[3] <=miso;
    			 end
    		 3'd5:
    		     begin
    			      receive_cnt <=3'd6;
    				  spi_cs   <=1'b0;
    				  data_out[2] <=miso;
    			 end
    		 3'd6:
    		     begin
    			      receive_cnt <=3'd7;
    				  spi_cs   <=1'b0;
    				  data_out[1] <=miso;
    			 end
    		 3'd7:
    		     begin
    			      receive_cnt <=3'd0;
    				  spi_cs   <=1'b0;
    				  data_out[0] <=miso;
    			 end	
            endcase			 
    	end
       else
        begin
    	     receive_cnt <=3'd0;
    		 spi_cs <=1'b1;
    		 mosi <=1'b0;
    		 data_out <=7'b0;
    	end
    	
    endmodule 
    

    测试代码

    /*****************************
    this is a test code for spi function
    
    ***************************************/
    `timescale 1 ns/ 1ns
    `define clk_periond 100
    
    module spi_tb;
    
    
    reg clk;//system clk 50MHZ
    reg rstn;//active low
    reg rd;
    reg wr;
    reg [7:0]data_in;
    reg miso;
    
    wire mosi;
    wire [7:0]data_out;
    wire spi_clk;
    wire spi_cs;
    wire wr_done;
    wire rd_done;
    
    spi spi(
    .clk(clk),
    .rstn(rstn),
    .rd(rd),
    .wr(wr),
    .data_in(data_in),
    .data_out(data_out),
    .miso(miso),
    .mosi(mosi),
    .spi_cs(spi_cs),
    .spi_clk(spi_clk),
    .wr_done(wr_done),
    .rd_done(rd_done)
    );
    
    
    always #(`clk_periond/2) clk =~clk;
    
    initial 
           begin
    	        clk=0;
    			rstn=1;
    			data_in=8'ha3;
    			
    			#(`clk_periond+20)
    			  rstn=0;
    			  
    			#(`clk_periond*5)
    			  rstn=1;
    			 
    			#(`clk_periond*5)
    			  rd=1;
    			  wr=1;
    			#(`clk_periond*9)
    			  rd=0;
                  wr=0;
                #(`clk_periond*10)
                  $stop;		  
    	   
    	   end
    	   
        always@(posedge spi_clk)
           if(rd|wr)
              miso =mosi;
           else
              miso =0;   
        
        
        endmodule
    
    展开全文
  • SPI协议的Verilog_实现

    2013-04-26 14:08:42
    SPI协议的Verilog_实现,SPI接口在CPLD或FPGA中的代码实现。
  • spi从模式的verilog代码

    热门讨论 2011-11-24 10:22:21
    spi从模式的verilog代码,介绍了什么是spi总线及总线工作在从模式时的verilog代码,希望可以帮到大家
  • SPI verilog仿真实现

    2012-03-18 16:21:10
    SPI verilog仿真实现 仿真功能实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,037
精华内容 814
关键字:

spiverilog