这篇文章写一下今天早上设计的并行数据到串行数据的转换器,也算是对并行总线和串行总线一个小小的应用,编码过程中也用到了task。

该转换器主要实现的功能是:

1、把并行地址存入寄存器

2、把并行数据存入寄存器

3、连接串行单总线

4、地址的串行输出

5、数据的串行输出

6、挂起串行单总线

7、给信号源应答

8、让信号源给出下一个操作对象

9、结束写操作

该设计利用嵌套的状态机实现,主状态机分为四个状态:idle,addr_write,data_write,stop,主状态机中会涉及到任务shift8out的调用,该任务主要实现并行数据到串行数据的转换,也是由一个状态机实现。下面给出整个设计的代码:

设计代码:

///并串转换器//
module ps_convertor(clk,rst,data,addr,sda,ack);
parameter idle=4'b0001,addr_write=4'b0010,data_write=4'b0100,stop=4'b1000;//独热编码
parameter sh8_start=9'b00000_0001;
parameter bit6     =9'b00000_0010;
parameter bit5     =9'b00000_0100;
parameter bit4     =9'b00000_1000;
parameter bit3     =9'b00001_0000;
parameter bit2     =9'b00010_0000;
parameter bit1     =9'b00100_0000;
parameter bit0     =9'b01000_0000;
parameter sh8_stop =9'b10000_0000;input clk,rst;
input [7:0]addr,data;
inout sda;//串行总线
output ack;//应答信号将输入测试模块reg ack;reg link_write;//写开关
reg [7:0] sh8out_buf;//并行总线缓冲器reg [3:0] mstate;//主状态机的状态寄存器
reg [8:0] sh8_state;//并串转换状态机状态寄存器reg FF;//标志寄存器,用来表示任务是否完成assign sda=(link_write)?sh8out_buf[7]:1'hz;//串行总线数据传输always@(posedge clk)
beginif(!rst)//同步复位beginmstate<=idle;link_write<=0;FF<=0;sh8out_buf<=0;//sh8_state<=sh8_start;ack<=0;endelse begincase (mstate)idle: beginmstate<=addr_write;link_write<=0;FF<=0;sh8out_buf<=addr;sh8_state<=sh8_start;ack<=0;endaddr_write: beginif(FF==0)beginshift8out;endelse beginFF<=0;mstate<=data_write;sh8out_buf<=data;sh8_state<=sh8_start;endenddata_write:beginif(FF==0)beginshift8out;endelse beginFF<=0;mstate<=stop;ack<=1;endendstop: beginack<=0;mstate<=idle;end//default: mstate<=idle;       endcaseend
end
//并串转换模块
task shift8out;begincase(sh8_state)sh8_start: beginlink_write<=1;sh8_state<=bit6;endbit6:      begin//link_write<=1;sh8_state<=bit5;sh8out_buf<=sh8out_buf<<1;endbit5:      beginsh8_state<=bit4;sh8out_buf<=sh8out_buf<<1;endbit4:      beginsh8_state<=bit3;sh8out_buf<=sh8out_buf<<1;endbit3:      beginsh8_state<=bit2;sh8out_buf<=sh8out_buf<<1;endbit2:      beginsh8_state<=bit1;sh8out_buf<=sh8out_buf<<1;endbit1:      beginsh8_state<=bit0;sh8out_buf<=sh8out_buf<<1;endbit0:      beginsh8_state<=sh8_stop;sh8out_buf<=sh8out_buf<<1;endsh8_stop: begin FF<=1;sh8_state<=sh8_start;link_write<=0;endendcaseend
endtaskendmodule

测试模块:

`timescale 1ns/1ns
`define half_cycle 10
module signal;
reg clk,rst;
reg [7:0]data,addr;
wire sda,ack;
always #(`half_cycle) clk=~clk;
initial
beginrst=1;clk=0;data=8'b1010_1010;addr=0;#100 rst=0;#100 rst=1;#(200* `half_cycle)$stop;
endalways @(posedge ack)
begindata=data+1;addr=addr+1;
endps_convertor m(clk,rst,data,addr,sda,ack);
endmodule

最终在modelsim中得到的仿真图如下:








												

并行数据转换为串行数据的转换器相关推荐

  1. verilog并行数据转换为串行输出

    代码实现在conv_en的控制下,将16位并行数据,转换为串行数据输出,并行数据转换为串行数据后,第一个周期是空的,第二个周期才会有数据输出,因为复位过后的din_reg初始值为0. module A ...

  2. Spartan-6的SelectIO资源

    SelectIO资源 Spartan-6有丰富的I/O资源,包括SelectIO和RocketIO. Spartan-6每个I/O片(Tile)包含两个IOB.两个ILOGIC2.两个OLOGIC2和 ...

  3. 第六章——串并行通信与接口技术

    串行通信涉及到的几个问题 (一) 全双工方式:一个通信系统中,对数据的两个传输方向采用不同的通道,系统可以同时进行发送和接受. 半全工方式:输入过程和输出过程使用同一通道,所以,两个不能同时进行. 单 ...

  4. 实验六 移位寄存器及其应用

    目录 一.预习要求 二.实验目的 三.实验原理 1.移位寄存器 2.移位寄存器的应用 (1)用74LS194构成环形计数器 (2)用74LS194实现数据串行/并行转换 ①串行/并行转换器 ②并行/串 ...

  5. SerDes接口——架构与电路

    随着通信技术的飞速发展,高速串行互连以其结构简单,不需要传输同步时钟,相比并行传输有更高数据传输效率的优点,成为现代通信和数据传输的重要组成部分.随着对数据传输速率要求的不断提高,SERDES应运而生 ...

  6. 基于 MSP430F6736 的全 SOC 单相智能电能表设计

    1.芯片MSP430F6736信息 主控芯片 MSP430F6736 是一款高性能.高集成的 16 位超低功耗混合信号处理器,主频可达25MHz,具有丰富的片上资源,生产厂家是美国德州仪器(TI). ...

  7. UART协议快速扫盲

    文章目录 1 UART发展历史 1.1 早期的串行通讯设备 1.2 早期的芯片级UART 1.3 现代UART的发展 2 预备知识 3 协议层 起始位 数据 校验位 停止位 波特率 4 传输过程 5 ...

  8. 我打赌!你还不会UART

    前面的话 自从国庆长假被密密麻麻的红色炸弹击中之后,酒也没少喝,最终喝到断片进了医院,身体恢复后终于更新了一篇基础的UART,献给刚好需要的您: 目录 1 UART发展历史 1.1 早期的串行通讯设备 ...

  9. MSP432的串行通信

    目录 专栏 数字通信基本知识 组成 串行通信和并行通信 同步通信和异步通信 异步串行通信的通用基础知识 异步串行通信的格式 串行通信的波特率 奇偶校验 串行通信传输方式术语 1.全双工(Full-du ...

最新文章

  1. 【DIY】arduino播放音乐方案——TMRpcm
  2. git 查看某个文件的历史记录
  3. 中央空调水系统与制冷系统运行参数
  4. 【AI-1000问】人脸的4个方向,你还分的清楚吗?
  5. REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED
  6. 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解
  7. 使用git向码云上提交代码
  8. 微服务技术栈:API网关中心,落地实现方案
  9. Angular Light 指令用法
  10. react 更新input 默认值setfieldsvalue_值得收藏的React知识点查漏补缺
  11. [No000083]文件与文件夹操作
  12. 超详细window10系统快速搭建Linux镜像环境
  13. jQuery基础知识梳理(含中文文档,自己的理解和代码注释)
  14. 支付系统中人民银行支付系统(CNAPS)和中国银联下面的跨行支付系统是一回事儿吗?
  15. python身份证验证程序_python 身份证验证
  16. 日剧·日综资源集合(建议收藏)
  17. [渝粤教育] 长安大学 互换性与技术测量 参考 资料
  18. js前端导出Excel(可自定义文件名称,后缀,有边框样式)
  19. Window alert() 方法
  20. matlab中SPI值,挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见

热门文章

  1. Android中你不得不知的几个问题及解决方法
  2. ubuntu服务器上,求生之路2服务器如何把监听地址改为0.0.0.0
  3. 为什么要学习HashMap的底层原理?
  4. sql统计表个数以及表中字段个数
  5. 机器学习中的K-means算法原理与R语言实例
  6. MongoDB 4.2.3 安装以及安装遇到的问题“service MongoDB failed to start,verify that you have sufficient privilege”
  7. 三种近距离通信技术(WIFI、蓝牙、NFC)简述
  8. 基于PHP的餐饮行业管理系统
  9. 树支路总数 = 树节点总数 - 1
  10. ImageView 加载本地(手机)图片