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

    文章

    10796

    浏览量

    210701
  • soc
    soc
    +关注

    关注

    38

    文章

    4081

    浏览量

    217717
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1687

    浏览量

    91153
  • CS
    CS
    +关注

    关注

    0

    文章

    54

    浏览量

    24473
  • MOSI
    +关注

    关注

    0

    文章

    5

    浏览量

    3964

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

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

收藏 人收藏

    评论

    相关推荐

    SPI接口静电放电防护方案

    SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术,是一种
    的头像 发表于 09-20 15:31 242次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>接口</b>静电放电防护方案

    航天级100krad隔离式串行外设接口(SPI)LVDS电路

    电子发烧友网站提供《航天级100krad隔离式串行外设接口(SPI)LVDS电路.pdf》资料免费下载
    发表于 09-20 10:54 3次下载
    航天级100krad隔离式<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>(<b class='flag-5'>SPI</b>)LVDS电路

    航天级100krad隔离式串行外设接口SPI)RS-422电路

    电子发烧友网站提供《航天级100krad隔离式串行外设接口SPI)RS-422电路.pdf》资料免费下载
    发表于 09-19 13:15 2次下载
    航天级100krad隔离式<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>(<b class='flag-5'>SPI</b>)RS-422电路

    串行接口PCB设计指南:优化布局与布线策略

    串行接口是计算机上的一个扩展接口,通常简称为串口或COM口,采用串行通信方式进行数据传输。在串行通信中,数据是一位一位地顺序传送的,通信线路
    的头像 发表于 09-18 13:58 1388次阅读
    <b class='flag-5'>串行</b><b class='flag-5'>接口</b>PCB设计指南:优化布局与布线策略

    串行接口PCB设计指南:优化布局与布线策略

    和B)进行通信,可以实现点对点或者总线式的通信方式。由于其良好的传输特性和可靠性,RS485接口常用于工业自动化、远程监控、智能家居等领域。 3、SPI
    发表于 09-18 12:02

    CAN总线接口类型

    CAN总线(Controller Area Network)是一种基于广播的串行通信协议,广泛用于连接分布式系统中的各个设备,实现它们之间的数据交换和控制。CAN总线
    的头像 发表于 09-03 14:13 1052次阅读

    SPI总线的定义和特点

    SPI总线(Serial Peripheral Interface),全称为串行外围设备接口,是由Motorola公司提出并定义的一种同步、串行
    的头像 发表于 09-03 14:05 477次阅读

    串行外设接口的菊花链实现

    电子发烧友网站提供《串行外设接口的菊花链实现.pdf》资料免费下载
    发表于 08-27 09:45 1次下载
    <b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>的菊花链<b class='flag-5'>实现</b>

    TUSB2046x 4端口集线器,用于带可选串行EEPROM接口的通用串行总线数据表

    电子发烧友网站提供《TUSB2046x 4端口集线器,用于带可选串行EEPROM接口的通用串行总线数据表.pdf》资料免费下载
    发表于 06-25 09:36 0次下载
    TUSB2046x 4端口集线器,用于带可选<b class='flag-5'>串行</b>EEPROM<b class='flag-5'>接口</b>的通用<b class='flag-5'>串行总线</b>数据表

    一文详解SPI串行外设接口

    SPI也是MCU最常见的对外通信口之一,由摩托罗拉在上世纪80年代中开发,用于嵌入式系统中器件之间的短距离数据通信,标准模式使用四条信号线。目前常见的应用器件有:LCD模组、以太网模块、SPI串行Flash和很多传感器等,大部分
    的头像 发表于 01-18 09:45 5873次阅读
    一文详解<b class='flag-5'>SPI</b><b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>

    能否用MCU访问非标准SPI接口

    当前许多精密模数转换器(ADC)具有串行外设接口(SPI)或某种串行接口,用以与包括微控制器单元(MCU)、DSP和FPGA在内的控制器进行
    的头像 发表于 01-09 08:23 519次阅读
    能否用MCU访问非标准<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>?

    能否用MCU访问非标准SPI接口

    当前许多精密模数转换器(ADC)具有串行外设接口(SPI)或某种串行接口,用以与包括微控制器单元(MCU)、DSP和FPGA在内的控制器进行
    的头像 发表于 12-23 12:25 777次阅读
    能否用MCU访问非标准<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>?

    并行总线串行总线的区别

    。 1.定义和原理: 并行总线是指在计算机系统中同时传送多个比特的数据线路,它通过并行传输数据位来提高数据传输速度和带宽。而串行总线则是指在计算机系统中逐位地传输数据的数据线路,它通过串行
    的头像 发表于 12-07 16:45 3279次阅读

    SPI接口的相关介绍

    轴加速度传感器,下面就由小编带各位小伙伴详细了解一下SPI接口。六轴加速度传感器使用SPI总线进行设置与数据传输。SPI的通信原理很简单,它
    的头像 发表于 12-06 15:49 1202次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>接口</b>的相关介绍

    SPI串行外设接口是什么

    SPI用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入
    的头像 发表于 11-09 17:52 624次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>是什么