一、串入并出移位寄存器

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. 如何运行SpringBoot项目
  2. R语言Gamma分布函数Gamma Distribution(dgamma, pgamma, qgamma rgamma)实战
  3. 显示乱七八糟图片问题之解决
  4. python爬虫获取的网页数据为什么要加[0-python爬虫解析页面数据的三种方式
  5. 【Java设计模式】单例模式
  6. java中pi_Java-Pi的几种实现
  7. python:Anaconda+Pycharm Community版+Django搭建属于自己简易WEB
  8. mysql error code 145,MYSQL 错误#145解决方法
  9. “红色军团”崛起Gartner x86服务器虚拟化魔力象限
  10. 自定义的OnFileSaveAs函数无法响应
  11. Java应用打包后运行需要注意编码问题
  12. ggplot2作图4
  13. java echarts 饼图_饼图 | ECharts 数据可视化实验室
  14. 编译OpenJDK12:atomic.hpp: fatal error C1189: size_t is not WORD_SIZE(换了VS2017编译)
  15. rant c语言头文件,用CGIC库来开发CGI程序
  16. 基于javaweb的在线学习系统
  17. Linux网络编程 | UDP编程
  18. 【SpringBoot整合缓存】-----jetcache以及j2cache篇
  19. n个不同对象聚类为k个类别有多少种可能性? 李航博士,统计学习方法2nd.公式14.21的修正.
  20. java导出dbf_java 导出dbf格式

热门文章

  1. NOIP2020游记
  2. Java8之写一个装逼的函数式代码
  3. Sweetviz:让你只需三行代码实现Python探索性数据分析
  4. 高中计算机期末试题,高中信息技术期末试卷
  5. hashCode:哈希值
  6. 译书《物联网实战指南》出版 | 新成就:翻译自己的英文简介
  7. linux下 软件安装与卸载(3)
  8. js node.js读取excel文件返回为json文本
  9. mpc5125的lpc总线
  10. 【信号去噪】基于多种小波变换阙值+改进的阈值数字实现信号去噪附Matlab代码