一、串入并出移位寄存器

1.1、概念

串入并出移位寄存器:串行数据,经过几个时钟周期,
在移位寄存器中,最终输出并行的数据。

2.1、串入并出设计图

端口解释:
a) i_clk:串口时钟
b) i_rest:模块复位信号
c) i_data:串口输入端
d) i_ena:片选信号
e) i_full:模块输入缓冲器已满(提醒发送端停止发送)
f) o_ready:模块输出缓冲器已准备好数据(提醒并行接收端可以接收数据了)
g) o_cout[7:0]:并行数据输出端
h) i_ack:并行接端数据接收完成反馈信息(这时如果模块输入缓冲区有已接收的数据则可将数据传送至输出缓冲区进行发送)

二、实现代码

2.1、SIPO module:

module SIPO(o_ready,o_cout,i_ack,i_full,i_clk,i_rest,i_data,i_ena);output o_ready,o_cout,i_full,i_ack;input i_clk,i_rest,i_data,i_ena;reg i_full,o_ready,i_ack;reg [7:0] i_buffer;wire [7:0] o_cout;reg [7:0] o_cout_temp,o_buffer;reg [2:0] i_flag;//该模块采用双缓冲机制-输入缓冲和输出缓冲,
//在输出缓冲向外并行发送数据的同时 如果输入缓冲器不满则可继续串行接收数据;//时序逻辑电路always @(posedge i_clk or posedge i_rest)beginif(i_rest)begino_cout_temp<=8'b0;     //输出为0i_full<=0;            //模块输入缓冲器未满o_ready<=0;          //模块输出缓冲器未准备好数据i_buffer<=0;     //输入缓冲器置0o_buffer<= 8'b0;  //输出缓冲器置0i_ack<=0;          //输出未接收完数据i_flag<=3'b000;      //标记信号为0 没准备好i_full<=8'b0;     //输入缓冲标记为0 没准备好endelse if(i_ena)    //片选信号选通beginif(i_ack==0)         //并行端未接收完成  前9个周期beginif(i_full==0 & o_ready==0)            //模块输入缓存器未满 输出缓冲器没做好准备beginif(i_flag==3'b111)            //输入buffer已经满了 提醒发送端停止发送 begin  o_buffer <= i_buffer;   //输出buffer赋值为输入buffer 非阻塞赋值i_full <=1;endelse       //一次输出完成begini_buffer<={i_buffer[7:1],i_data};  //输去缓冲器置为输入缓冲器  阻塞赋值i_flag<=i_flag + 3'b001;          endendelse if(i_full==1 & o_ready==0)//输入buffer满了 赋值为输出buffer 非阻塞赋值begino_cout_temp<=o_buffer;  o_ready<=1;     //输出准备endelse if(i_full==1 & o_ready==1)    //输出buffer满了 赋值为输出o_cout_temp<=o_buffer;    // 赋值为输出i_ack<=1;               //输出有值了i_full<=0;endelse //并行接端数据接收完成反馈信息(这时如果模块输入缓冲区有已接收的数据则可将数据传送至输出缓冲区进行发送)beginif(i_full) //输入buffer满的begino_buffer <= i_buffer;o_cout_temp <= o_buffer;i_full <= 0;endelse begin i_buffer <= i_data;i_full <=1 ;endendendelse                //高阻态begini_full<=1'bz;o_ready<=1'bz;i_buffer<= 8'bz;o_buffer<= 8'bz;o_cout_temp<= 8'bz;endendassign o_cout = o_cout_temp;
endmodule

2.2、test_SIFO module:

module test_SIPO;reg  i_clk_t,i_data_t,i_rest_t,i_ena_t;wire o_ready_t,i_ack_t,i_full_t;reg [7:0] i_buffer_t,o_buffer_t;wire [7:0] o_cout_t;SIPO mySIPO(.o_ready(o_ready_t),.o_cout(o_cout_t),.i_ack(i_ack_t),.i_full(i_full_t),.i_clk(i_clk_t),.i_rest(i_rest_t),.i_data(i_data_t),.i_ena(i_ena_t));initial begin i_rest_t = 1;    //rest signali_clk_t = 0;i_data_t = 0;i_ena_t =0;#10 i_rest_t = 0;#5 i_ena_t = 1;endalways #5 i_clk_t = ~i_clk_t;always #10 i_data_t = {$random}%2;
endmodule

2.3、仿真截图

verilog数字系统设计——串入并出移位寄存器相关推荐

  1. 在VIVADO上实现的非常简易的RISC-V CPU设计(来自《Verilog数字系统设计》夏宇闻著)

    在VIVADO上实现的非常简易的RISC-V CPU设计 一.实验要求重述: 1.实验目的 2.实验要求: 二.学习准备: 1.什么cpu? 2.cpu需要具有哪些部件? 3.什么是RISC_CPU? ...

  2. [转]Verilog数字系统设计教程(大连理工一博士学习笔记)

    写在前面 学习Verilog HDL有一些时间,大概一年前的的这个时候开始的吧,从一点都不懂开始学,主要还是看夏宇闻老师的这本书入的门--<Verilog数字系统设计教程>,书写的特别好. ...

  3. Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习十

    Verilog数字系统设计教程[第4版]夏宇闻--第三部分练习十 测试仿真流程 模块源代码 测试模块代码 结果波形 测试仿真流程 测试仿真环境为win系统下的quartus prime + model ...

  4. Verilog数字系统设计——8位数字比较器

    Verilog数字系统设计--8位数字比较器 题目 试分别使用门级原语和always 语句设计8位数字比较器,如果输入A[7:0]小于等于输入B[7:0]则输出1,否则输出0,并写出测试代码进行测试. ...

  5. verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第五章)

    <Verilog数字系统设计教程>夏宇闻 第三版思考题 答案合集 :个人主页verilog专栏中 1.为什么建议在编写Verilog模块程序时,如果用到 if 语句建议大家把配套的else ...

  6. Verilog数字系统设计——4 选1 多路选择器

    Verilog数字系统设计--4 选1 多路选择器 题目 试分别使用assign.门级原语和always 语句设计4 选1 多路选择器,并写出测试代码进行测试.要求编制测试模块对实现的逻辑功能进行完整 ...

  7. 【Verilog数字系统设计(夏宇闻)4-----Verilog语法的基本概念2】

    Verilog数字系统设计(夏宇闻)3-----Verilog语法的基本概念2 Verilog 模块的基本概念 Verilog用于模块的测试 Verilog 模块的基本概念 下面先介绍几个简单的Ver ...

  8. Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习十二

    Verilog数字系统设计教程[第4版]夏宇闻--第三部分练习十二 测试仿真流程 模块源代码 测试模块代码 测试仿真流程 测试仿真环境为win系统下的quartus prime + modelsim ...

  9. Proteus仿真:利用74HC164的串入并出功能实现流水灯

    实现目标 使用74HC164的并行输出引脚接8支发光二极管,利用它的串入并出功能,把发光二极管从左到右轮流点亮,并反复循环 Proteus仿真图 C51代码 #include <REG52.H& ...

最新文章

  1. 2017-1-7 html元素分类(1)
  2. python pip 自动补全
  3. JSP-03-实现数据传递
  4. hql 字符串where语句_hibernate的hql查询语句总结
  5. 林华达视角-概率图模型与计算机视觉
  6. 27对象的向上向下转型
  7. 电商大战折射商业伦理缺失形势探讨
  8. 调查:Java程序员最伤心,C++程序员最年老
  9. flume简介(大数据技术)
  10. Spring体系常用方法(一)
  11. 关于HTML5标签不兼容(IE6~8)
  12. Mysql常用分组聚合函数(统计行的数量、最大值、最小值、平均值、求和)
  13. Nordic Collegiate Programming Contest (NCPC) 2016
  14. 数据挖掘学习06 - 《数据挖掘导论》导读
  15. aspose条件格式无法读取_分析 Pandas 源码,解决读取 Excel 报错问题
  16. H323plus的学习使用(2)——simple实现音视频通话
  17. 三星Galaxy S20 5G版跑分曝光 骁龙865配12GB内存
  18. Android 8.0 linux内核,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序---Android8.0版本实现-对照老罗版本...
  19. 古董笔记本伪装成双核 1G内存 120G硬盘
  20. mysql水平union_mysql_union操作符

热门文章

  1. 网络传输前三层——物理层、数据链路层、网络层
  2. make 命令干什么用?
  3. java并行编程_RxJava(十一): 并行编程
  4. 人民币转换为中文大写
  5. 数据类型与数据结构 文件读写及绘图
  6. qqwry 纯真IP数据小工具 nali
  7. 破解linux系统的root密码
  8. Zabbix的SNMPTrap监控配置
  9. 5G传输速度与USB和WIFI传输速度对比
  10. 网站面包屑导航对SEO优化重要性