verilog手撕代码4——串行数据和并行数据转换


前言

2023.4.26


一、串转并

把串行输入的数据存储起来,移位寄存器移位,得到并行数据

module SIPO1 (
	input 				clk 	,    
	input 				rst_n	, 	
	input 				din 	,  	
	output reg [7:0]	dout		
);

	always @(posedge clk or negedge rst_n) begin : 
		if(~rst_n) begin
			dout <= 8'b0 ;
		end 
		else begin
			dout <= {dout[6:0],din};  //数据左移,串行输出的先是最高位
		end
	end

endmodule 

二、并转串

把并行数据缓存下来,再移位一个个数据输出

module(
	input clk,
	input reset,
	input [3:0] in,
	input en,      //使能信号,每次输出一个串行数
	output data);
	
	reg [3:0] in_r;

	always@(posedge clk)begin
		if(!reset)
			data <= 1'b0;
		else if (en)
			in_r <= in;
		else
			in_r <= in_r<<1;
	end
	
	assign data = in_r[3];
endmodule
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值