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

    文章

    10434

    浏览量

    206521
  • soc
    soc
    +关注

    关注

    38

    文章

    3741

    浏览量

    215650
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1613

    浏览量

    89585
  • CS
    CS
    +关注

    关注

    0

    文章

    52

    浏览量

    24317
  • MOSI
    +关注

    关注

    0

    文章

    5

    浏览量

    3940

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

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

收藏 人收藏

    评论

    相关推荐

    一文详解SPI串行外设接口

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

    基于STM32编写一个SPI接口例程

    SPI串行外设接口的缩写,是一种高速的,全双工,同步的通信总线
    的头像 发表于 10-31 15:53 831次阅读
    基于STM32编写一个<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>例程

    一文详解SPI总线协议

    SPI串行外设接口(Serial Peripheral Interface)的缩写。是Motorola公司推出的一种同步串行接口技术,是一
    发表于 10-26 15:27 485次阅读

    SPI总线协议概述

    SPI串行外设接口(Serial Peripheral Interface)的缩写。
    的头像 发表于 10-26 15:26 371次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>协议概述

    SPI总线学习笔记

    SPI是一种全双工的串行通信总线,最早由Motorola提出,虽然应用广泛,但没有一个统一的总线标准。相较于IIC总线
    发表于 09-20 15:17 501次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>学习笔记

    如何使用RS232转SPI实现串口和SPI接口的转换?

    如何使用RS232转SPI实现串口和SPI接口的转换? RS232转SPI是一种将串口和SPI
    的头像 发表于 09-14 17:52 1275次阅读

    SPI总线的原理与Verilog设计实现

     SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术
    发表于 08-14 09:00 930次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>的原理与<b class='flag-5'>Verilog</b>设计<b class='flag-5'>实现</b>

    IIC总线的原理与Verilog实现

    IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
    发表于 06-30 09:03 1274次阅读
    IIC<b class='flag-5'>总线</b>的原理与<b class='flag-5'>Verilog</b><b class='flag-5'>实现</b>

    SPI总线串口静电保护器件,该如何选型?

    串行外设接口(Serial Peripheral Interface),简称SPI接口,是一种高速、全双工、同步的通信总线
    的头像 发表于 06-16 17:52 841次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>串口静电保护器件,该如何选型?

    Verilog中Pmod ALS的SPI接口代码

    电子发烧友网站提供《Verilog中Pmod ALS的SPI接口代码.zip》资料免费下载
    发表于 06-15 09:32 0次下载
    <b class='flag-5'>Verilog</b>中Pmod ALS的<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>代码

    SPI总线协议的基础知识

    SPI,是英语 Serial Peripheral Interface 的缩写顾名思义就是串行外围设备接口SPI是一种高速的,全双工,同步的通信
    发表于 06-07 15:40 4237次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>协议的基础知识

    如何对SPI总线接口进行ESD静电放电保护?

    串行外设接口(Serial Peripheral Interface),简称SPI接口,是一种高速、全双工、同步的通信总线
    的头像 发表于 06-05 09:50 902次阅读
    如何对<b class='flag-5'>SPI</b><b class='flag-5'>总线</b><b class='flag-5'>接口</b>进行ESD静电放电保护?

    SPI串行外设接口设计实现

    SPI 全称为 Serial Peripheral Interface,译为串行外设接口。它是 Motorola 公司推出的一种相对高速的同步、全双工的通信总线协议。
    发表于 05-29 15:40 887次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>设计<b class='flag-5'>实现</b>

    51单片机进阶开发之浅谈SPI

    SPI(Serial Peripheral Interface,串行外设接口总线是摩托罗拉公司设计的一种同步串行通信
    发表于 05-26 16:09 1792次阅读
    51单片机进阶开发之浅谈<b class='flag-5'>SPI</b>

    串行通信SPI总线的详解分析

      SPI(Serial Peripheral Interface)总线系统是一种同步串行外设接口,可以是MCU与各种外围设备以串行方式进行
    的头像 发表于 05-05 16:40 3107次阅读
    <b class='flag-5'>串行</b>通信<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>的详解分析