0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于SPI串行总线接口的Verilog实现

电子工程师 来源:现代电子技术 作者:孙丰军;余春暄 2021-05-29 10:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简 介:

集成电路设计越来越向系统级的方向发展,并且越来越强调模块化的设计。SPI(Serial Peripheral Bus)总线是Motorola公司提出的一个同步串行外设接口,容许CPU 与各种外围接口器件以串行方式进行通信、交换信息。本文简述了SPI总线的特点,介绍了其4条信号线,SPI串行总线接口的典型应用。

重点描述了SPI串行总线接口在一款802.11b芯片中的位置,及该接口作为基带和射频的通讯接口所完成的功能,并给出了用硬件描述语言Verilog HDL 实现该接口的部分程序。该实现已经在Modelsim 中完成了仿真, 并经过了FPGA 验证, 最后给出了仿真和验证的结果。

在SOC设计中,利用EDA 工具设计芯片实现系统功能已经成为支撑电子设计的通用平台。并逐步向支持系统级的设计方向发展。而且,在设计过程中,越来越强调模块化设计。

SPI总线是Motorola公司提出的一个同步串行外设接口,具有接口线少、通讯效率高等特点。本文给出的是利用Verilog HDL实现的SPI总线模块,该模块是802.11b无线局域网芯片中一个子模块,该模块完成了芯片中基带(base band)与RF的通讯工作。

1 SPI总线接口概述

SPI(Serial Parallel Bus)总线是Motorola公司提出的一个同步串行外设接口,允许CPU 与各种外围接口器件(包括模/数转换器、数/模转换器、液晶显示驱动器等)以串行方式进行通信、交换信息。他使用4条线:串行时钟线(SCK)、主机输入/从机输出线(MISO)、主机输出/从机输入线(MOSI)、低电平有效的使能信号线(CS)。这样,仅需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件 其典型结构如图1所示。

7a171ac8-bfed-11eb-9e57-12bb97331649.png

SPI总线具有以下特点:

(1)连线较少,简化电路设计。并行总线扩展方法通常需要8根数据线、8~16根地址线、2~3根控制线。而这种设计,仅需4根数据和控制线即可完成并行扩展所实现的功能。

(2)器件统一编址,并与系统地址无关,操作SPI独立性好。

(3)器件操作遵循统一的规范,使系统软硬件具有良好的通用性。

2 SPI总线接口的设计与实现

该模块是802.1lb无线局域网芯片中的一子模块,其在芯片中的位置如图2所示。

7d27bda8-bfed-11eb-9e57-12bb97331649.png

其中base band(基带)为SPI的主控器(master),RF(射频)为SPI的受控器(slave)。SPI interface作为baseband与RF的通讯接口,主要完成以下工作:

(1)将从base band接收到的16位的并行数据,转换为RF所能接收的串行数据,并将该数据根据SPI协议送给RF。

(2)产生RF所需的时钟信号SCLK,使能信号CSB。

(3)接收从RF传回的串行数据,并将其转换为并行数据。

(4)将base band发送的数据,与RF返回的数据进行比较,并把比较结果传给base band。

下面给出用Verilog HDL语言实现前两项功能的关键程序,相关变量的声明在此略去。

//generate a counter

always@ (posedge clock or negedge reset)

begin

if(!reset)

counter《= 0;

else if(enable)

begin

if(counter《 53)

counter=counter + 1;

end

end

//generate signal “csb”

always@ (posedge clock or negedge reset)

begin

if(!reset)

csb 《=1;

else if(counter》= 1 && counter 《= 50)

csb = 0;

else

csb = 1;

end

//Generate “sclk”

always@ (posedge clock or negedge reset)

begin

case(counter)

6‘d02: sclk = 1;

6’d05: sclk = 1;

6‘d08: sclk = 1;

6’d11: sclk = 1;

6‘d14: sclk = 1;

6’d17: sclk = 1;

6‘d20: sclk = 1;

6’d23: sclk = 1;

6‘d26: sclk = 1;

6’d29: sclk = 1;

6‘d32: sclk = 1;

6’d35: sclk = 1;

6‘d38: sclk = 1;

6’d41: sclk = 1;

6‘d44: sclk = 1;

6’d47: sclk = 1;

default sclk = 0;

endcase

end

always@ (counter or csb)

begin

if(csb == 0)

case(counter)

6‘h00,

6’h01,

6‘h02,

6’h03:mosi_index = 5‘h00;

6’h04,

6‘h05,

6’h06:mosi_index = 5‘h01;

6’h07,

6‘h08,

6’h09:mosi_index = 5‘h02;

6’h0A,

6‘h0B,

6’h0C:mosi_index = 5‘h03;

6’h0D,

6‘h0E,

6’h0F:mosi_index = 5‘h04;

6’h10,

6‘h11,

6’h12:mosi_index = 5‘h05;

6’h13,

6‘h14,

6’h15:mosi_index = 5‘h06;

6’h16,

6‘h17,

6’h18:mosi_index = 5‘h07;

6’h19,

6‘h1A,

6’h1B:mosi_index = 5‘h08;

6’h1C,

6‘h1D,

6’hlE:mosi_index = 5‘h09;

6’h1F,

6‘h20,

6’h21:mosi_index = 5‘h0A ;

6’h22,

6‘h23,

6’h24:mosi_index = 5‘h0B;

6’h25,

6‘h26,

6’h27:mosi_index = 5‘h0C ;

6’h28,

6‘h29,

6’h2A:mosi_index = 5‘h0D ;

6’h2B,

6‘h2C,

6’h2D:mosi_index = 5‘h0E;

6’h2E,

6‘h2F,

6’h30:mosi_index = 5‘h0F;

default:mosi_index = 5’h00;

endcase

else

mosi_index = 5‘h00:

end

assign mosi=spi_data[mosi_index3];

用Verilog HDL实现的SPI总线接口模块,在ModelSim 中编译、调试,并做了前仿真。

前仿真通过后,又在Altera公司的EPXA10 Develop Board上做了FPGA验证,结果与在ModelSim 中的仿真结果一致。最后在base band与RF的联合调试过程中,该SPI总线接口模块达到了预期的要求。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11327

    浏览量

    225878
  • soc
    soc
    +关注

    关注

    40

    文章

    4624

    浏览量

    230170
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1900

    浏览量

    102118
  • CS
    CS
    +关注

    关注

    0

    文章

    55

    浏览量

    25629
  • MOSI
    +关注

    关注

    0

    文章

    5

    浏览量

    4364

原文标题:SPI串行总线接口的Verilog实现

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析Microchip 23A256/23K256 256-Kbit SPI总线低功耗串行SRAM

    /ST.pdf 一、产品概述 Microchip的23A256/23K256是256-Kbit的串行SRAM设备,通过简单的串行外设接口SPI)兼容
    的头像 发表于 04-05 13:50 664次阅读

    Everspin四路串行外设接口MRAM芯片

    组织为512Kx8使用的片选(CS)、串行输入(SI)、串行输出(SO)和串行时钟(SCK)的四引脚接口串行外设
    的头像 发表于 03-26 15:56 169次阅读
    Everspin四路<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>MRAM芯片

    深入解析Microchip 25AA128/25LC128 128K SPI总线串行EEPROM

    深入解析Microchip 25AA128/25LC128 128K SPI总线串行EEPROM 一、引言 在电子设计领域,串行EEPROM是一种常用的非易失性存储器,广泛应用于各种需
    的头像 发表于 02-09 16:50 611次阅读

    使用PicoScope示波器解码SPI总线信号

    串行外设接口SPI, Serial Peripheral Interface)总线最早由 Motorola 开发,用于其微控制器产品。由于其结构简单、
    的头像 发表于 02-04 09:49 8094次阅读
    使用PicoScope示波器解码<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>信号

    瑞芯微(EASY EAI)RV1126B SPI使用

    1.SPI简介SPI串行外设接口(SerialPeripheralInterface)的缩写,是Motorola公司推出的一种同步串行
    的头像 发表于 01-03 14:00 1928次阅读
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>SPI</b>使用

    PCA9958:24通道SPI串行总线63 mA/5.5 V恒流LED驱动器的深度解析

    PCA9958:24通道SPI串行总线63 mA/5.5 V恒流LED驱动器的深度解析 在LED驱动领域,NXP的PCA9958是一款极具特色的24通道SPI
    的头像 发表于 12-24 15:05 666次阅读

    SPI、I2C、UART三种串行总线的区别与对比

    1)概念定义 SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS:意为IC之间总线) UART(Universa
    发表于 11-20 07:19

    瑞萨RA8D1 MCU的OSPI Flash适配指南

    OSPI Flash(Octal SPI Flash)是一种基于SPI串行外设接口)扩展的高速串行Flash存储器,采用8-bit数据
    的头像 发表于 07-17 11:24 3313次阅读
    瑞萨RA8D1 MCU的OSPI Flash适配指南

    ADUM4150用于SPI高速接口的5kV专用隔离器技术手册

    ADuM4150是一款5kV rms、6通道SPIsolator ^™^ 数字隔离器,针对隔离式串行外设接口(SPI)进行了优化。(提供3.75kV rms型号)。这款器件基于ADI公司
    的头像 发表于 06-04 10:55 1028次阅读
    ADUM4150用于<b class='flag-5'>SPI</b>高速<b class='flag-5'>接口</b>的5kV专用隔离器技术手册

    ADUM4154用于SPI接口的5 kV专用隔离器技术手册

    ADuM4154是一款5kV rms、7通道SPIsolator ^™^ 数字隔离器,针对串行外设接口(SPI)进行了优化,并最多可以支持4个从器件。 (提供3.75kV rms型号)。这款器件
    的头像 发表于 06-04 10:48 1389次阅读
    ADUM4154用于<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>的5 kV专用隔离器技术手册

    LTM2895 100MHz隔离型DAC SPI串行接口技术手册

    LTM2895 是一款采用 DAC 控制信号的高速隔离型 μModule ^®^ (微型模块) SPI 接口,该器件专为隔离LTC 的通用型 DAC 系列和隔离通用型 SPI 接口而设
    的头像 发表于 06-03 10:04 1546次阅读
    LTM2895 100MHz隔离型DAC <b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>接口</b>技术手册

    MAX3420E USB外设控制器,SPI接口技术手册

    MAX3420E包含实现USB 2.0全速USB外设所需的数字逻辑电路和模拟电路。全速收发器具有±15kV ESD保护和可编程的USB连接和断开特性。内部的串行接口引擎(SIE)负责处理底层USB
    的头像 发表于 05-23 11:35 1240次阅读
    MAX3420E USB外设控制器,<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>技术手册

    MAX3421E USB外设/主机控制器,SPI接口技术手册

    串行接口引擎(SIE)处理底层USB协议,如错误校验和总线重试。通过频率高达26MHz的SPI接口访问寄存器组,
    的头像 发表于 05-22 16:39 1797次阅读
    MAX3421E USB外设/主机控制器,<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>技术手册

    基于RK3576开发板的SPI使用说明

    SPI串行外设接口(Serial Peripheral Interface)的缩写,是 Motorola 公司推出的一种同步串行接口技术,
    的头像 发表于 05-07 10:31 1726次阅读
    基于RK3576开发板的<b class='flag-5'>SPI</b>使用说明