verilog数字系统设计——串入并出移位寄存器_串入并出的移位寄存器verilog-程序员宅基地

技术标签: fpga开发  嵌入式硬件  verilog  单片机  

一、串入并出移位寄存器

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)
	begin
		if(i_rest)
		begin
			o_cout_temp<=8'b0;		//输出为0
			i_full<=0;			//模块输入缓冲器未满
			o_ready<=0;			//模块输出缓冲器未准备好数据
			i_buffer<=0;		//输入缓冲器置0
			o_buffer<= 8'b0;	//输出缓冲器置0
			i_ack<=0;			//输出未接收完数据
			i_flag<=3'b000;		//标记信号为0 没准备好
			i_full<=8'b0;		//输入缓冲标记为0 没准备好
		end

		else if(i_ena)	//片选信号选通
		begin
			if(i_ack==0)			//并行端未接收完成	前9个周期
			begin
				if(i_full==0 & o_ready==0)			//模块输入缓存器未满 输出缓冲器没做好准备
				begin
					if(i_flag==3'b111)			//输入buffer已经满了 提醒发送端停止发送 
					begin	
						o_buffer <= i_buffer;	//输出buffer赋值为输入buffer 非阻塞赋值
						i_full <=1;
					end
					else		//一次输出完成
					begin
						i_buffer<={
    i_buffer[7:1],i_data};	//输去缓冲器置为输入缓冲器  阻塞赋值
						i_flag<=i_flag + 3'b001;			
					end
				end
				else if(i_full==1 & o_ready==0)//输入buffer满了 赋值为输出buffer 非阻塞赋值
				begin
						o_cout_temp<=o_buffer;	
						o_ready<=1;		//输出准备
				end
				else if(i_full==1 & o_ready==1)	//输出buffer满了 赋值为输出
						o_cout_temp<=o_buffer;	// 赋值为输出
						i_ack<=1;				//输出有值了
						i_full<=0;
			end

			else //并行接端数据接收完成反馈信息(这时如果模块输入缓冲区有已接收的数据则可将数据传送至输出缓冲区进行发送)
			begin
				if(i_full)	//输入buffer满的
				begin
					o_buffer <= i_buffer;
					o_cout_temp <= o_buffer;
					i_full <= 0;
				end
				else 
				begin	
					i_buffer <= i_data;
					i_full <=1 ;
				end
			end
		end

		else				//高阻态
		begin
			i_full<=1'bz;
			o_ready<=1'bz;
			i_buffer<= 8'bz;
			o_buffer<= 8'bz;
			o_cout_temp<= 8'bz;

		end
		
	end
	assign 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 signal
		i_clk_t = 0;
		i_data_t = 0;
		i_ena_t =0;
		#10 i_rest_t = 0;
		#5 i_ena_t = 1;

	end

	always #5 i_clk_t = ~i_clk_t;
	always #10 i_data_t = {
    $random}%2;
endmodule


2.3、仿真截图

仿真截图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_53102289/article/details/122114886

智能推荐

数字文旅重塑旅游发展新格局:以数字化转型为突破口,提升旅游服务的智能化水平,为游客带来全新的旅游体验

通过数字化转型和智能化服务的提升,数字文旅为游客带来了全新的旅游体验,推动了旅游业的持续健康发展。数字文旅以数字化转型为突破口,通过提升旅游服务的智能化水平,为游客带来全新的旅游体验,引领旅游业迈向更加智能化、个性化的未来。“方案365”全新整理智慧文旅、智慧园区、数字乡村-智慧农业、智慧城市、数据治理、智慧应急、数字孪生、乡村振兴、智慧乡村、元宇宙、数据中台、智慧矿山、城市生命线、智慧水利、智慧校园、智慧工地、智慧农业、智慧旅游等300+行业全套解决方案。数字文旅的兴起正在重塑旅游发展的新格局。

DRF JWT认证进阶

实际的案例中,登录的方式有很多种,既可以是用户名,还可以是手机号,还可以是邮箱等,并且他们的登录输入入口都是一个,所以这里将实现这种接口用户表用普通的表创建一个数据表用于侧式认证功能username = models.CharField(max_length=64, verbose_name='用户名')password = models.CharField(max_length=64, verbose_name='密码')

使用VSCODE生成调试Linux下C++的CMake项目_vscode cmake 新建linux工程-程序员宅基地

文章浏览阅读1.4k次。以epoll-server项目为例,通过VSCODE编译并调试。该形目由CMake构建,目标在该目录下生成build目录,通过CMake生成Makefile工程到build目录下,然后在build目录下执行make命令进行编译,最后通过VSCODE进行调试。Build代码目录用VSCODE WSL模式打开该目录。在.vscode文件夹下面创建task.json。task.json{ "version": "2.0.0", "tasks": [ {.._vscode cmake 新建linux工程

“Beyond Compare 许可证密钥被撤销” 的解决方案_bcompare许可证密钥已被撤销-程序员宅基地

文章浏览阅读1.9w次,点赞3次,收藏5次。由于在数据库发布经常需要进行文件对比,最近在使用文件比较器时,该软件不能够使用。弹出框的消息为许可证秘钥被撤销,解决该问题的方法如下: 1、找到“C:\Users\[Your User Name]\AppData\Roaming\Scooter Software\Beyond Compare 3\”目录 2、将这个目录下的所有文件都删除掉,重新打开“B..._bcompare许可证密钥已被撤销

SQL 入门指南:从零开始学习 SQL-程序员宅基地

文章浏览阅读1k次,点赞19次,收藏10次。SQL是结构化查询语言(Structured Query Language)的缩写,是一种用于管理关系型数据库系统的语言。SQL允许用户通过特定的命令来创建、查询、更新和删除数据库中的数据。SQL的起源可以追溯到20世纪70年代,当时IBM的研究员Edgar F. Codd提出了关系数据库模型的概念,并在1970年发表了一篇题为“A Relational Model of Data for Large Shared Data Banks”的论文。

html简单网页源代码表格,HTML 表格-程序员宅基地

文章浏览阅读2.8k次。HTML 表格HTML 表格实例:First NameLast NamePointsJillSmith50EveJackson94JohnDoe80AdamJohnson67在线实例表格这个例子演示如何在 HTML 文档中创建表格。(可以在本页底端找到更多实例。)HTML 表格表格由 标签来定义。每个表格均有若干行(由 标签定义),每行被分割为若干单元格(由 标签定义)。字母 td 指表格数..._简易表单网站源码

随便推点

webrtc中APM(AudioProcessing module)的使用2-程序员宅基地

文章浏览阅读91次。这个其实就是从Audio_processing.h中拿出来的。APM should be placed in the signal chain as close to the audio hardware abstraction layer (HAL) as possible.APM accepts only 16-bit linear PCM audio data in frames of 10..._webrtc record level apm in level apm out level

DRF JWT认证进阶

实际的案例中,登录的方式有很多种,既可以是用户名,还可以是手机号,还可以是邮箱等,并且他们的登录输入入口都是一个,所以这里将实现这种接口用户表用普通的表创建一个数据表用于侧式认证功能username = models.CharField(max_length=64, verbose_name='用户名')password = models.CharField(max_length=64, verbose_name='密码')

C++-10

C++

sql server查看表大小_查看sql表的大小-程序员宅基地

文章浏览阅读3.9k次。sql server查看表大小查看SqlServer 数据库中各个表多少行:SELECT A.NAME ,B.ROWS FROM sysobjects A JOIN sysindexes B ON A.id = B.id WHERE A.xtype = 'U' AND B.indid IN(0,1) ORDER BY B.ROWS DESC数据库磁盘占用量:select name, CAST(convert(float,size) * (8192.0/1024.0)/1024 AS .._查看sql表的大小

【C语言】初阶指针(指针及其类型以及野指针)_c %zu-程序员宅基地

文章浏览阅读395次,点赞16次,收藏13次。指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。比如:char* 的指针解引用就只能访问一个字节,而int* 的指针解引用就能访问四个字节。_c %zu

F460 CLK配置功能模块说明_f460 tmera-程序员宅基地

文章浏览阅读1.4k次。F460CLK配置功能模块说明目录F460CLK配置功能模块说明CLK配置:1. DDL_ICG——初始化配置2. DDL_UTILITY——基础功能函数3.DDL_PRINT-待细化4.DDL_ADC5.DDL_AES——AES 加解密算法处理器6.DDL_CAN7. DDL_CLK8. DDL_CMP——电压比较器9. DDL_CRC10. DDL_DCU——数据计算单元11. DDL_DMAC——DMA 控制器..._f460 tmera