精华内容
下载资源
问答
  • 简单的串并转换verilog

    2021-03-30 09:26:01
    串并转换verilog实现 1、串转并的实现原理 数据从串行到并行,数据排列顺序是高位在前,可以用以下的编码方式实现: prl_temp <= {prl_temp , srl_in}; 其中,prl_temp是并行输出缓存寄存器,srl_in是串行输入...

    串并转换verilog实现

    1、串转并的实现原理

    1. 数据从串行到并行,数据排列顺序是高位在前,可以用以下的编码方式实现:
      prl_temp <= {prl_temp , srl_in};
      其中,prl_temp是并行输出缓存寄存器,srl_in是串行输入数据。
    2. 对一些有规定的串并转换,可以使用case语句判断实现。
    3. 对一些复杂的串并转换可以使用状态机实现。

    这边使用第一种方式实现
    verilog实现代码

    module serial2paraller(
        input       clk,
        input       rst_n,
        input       d,
        output reg [3:0]q
    );
    reg [3:0]data;
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            data <= 4'b0;
        else 
            data <= {data[2:0],d};
    end
    
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            q <= 4'b0;
        else
            q <= data;
    end
    
    endmodule
    

    tb文件

    `timescale 1ns/1ps
    module tb_serial2paraller();
    reg clk;
    reg d;
    reg rst_n;
    wire [3:0] q;
    
    initial begin
    	rst_n = 0;
    	clk = 0;
    	#13;
    	rst_n = 1;
    end
    
    always #5 clk = ~clk;
    
    initial begin
    	d = 0;
    	#5;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d= 0;
    	#10;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d = 0;
    	#10;
    	d =1;
    	#10;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d= 0;
    	#10;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d = 0;
    	#10;
    	d =1;
    	#10;
    	d = 1;
    	#10;
    	d = 0;
    	#10;
    	d =1;
    	#10;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d= 0;
    	#10;
    	d = 1;
    	#10;
    	d = 0;
    	#10;
    	d =1;
    	#10;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d= 0;
    	#10;
    	d = 1;
    	#10;
    	d = 0;
    	#10;
    	d =1;
    	#10;
    	d = 1;
    	#10;
    	d = 1;
    	#10;
    	d= 0;
    	#10;
    end
    
    serial2paraller u_serial2paraller(
    	.clk(clk),
    	.d(d),
    	.rst_n(rst_n),
    	.q(q)
    );
    
    endmodule
    

    仿真图
    在这里插入图片描述

    2、并转串的实现原理

      借助使能信号en,每次传入一个数据宽度的信号,en使能一次,然后将数据在系统时钟下移位输出即可。

    verilog实现代码

    module paraller2serial(
        input clk,
        input rst_n,
        input [4:0]d,
        input en,
        output q
    );
    reg[4:0]data;
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            data <= 5'b0;
        else if(en)
            data <= d;
        else 
            data <= data << 1;
    end
    assign q = data[4];
    endmodule
    

    tb文件

    `timescale 1ns/1ps
    module tb_paraller2serial();
    reg clk;
    reg [4:0]d;
    reg rst_n;
    reg en;
    wire q;
    initial begin
    	rst_n = 0;
    	clk = 0;
    	#13;
    	rst_n = 1;
    end
    always #5 clk = ~clk;
    initial begin
    	d = 5'b0;
    	#50;
    	d = 5'b10010;
    	#50;
    	d = 5'b01011;
    	#50;
    	d= 5'b10100;
    	#50;
    	d = 5'b11111;
    	#50;
    	d = 5'b11100;
    end
    //计数器
    reg[3:0]cnt;
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)begin
            en <= 1'b0;
            cnt <= 4'b0;
        end
        else if(cnt == 4'd4)begin
            en <= 1'b1;
            cnt <= 1'b0;
        end
        else begin
            en <= 0;
            cnt <= cnt + 1'b1;
        end
    end
    paraller2serial u_paraller2serial(
    	.clk(clk),
    	.d(d),
    	.rst_n(rst_n),
    	.en(en),
    	.q(q)
    );
    endmodule
    

    仿真图
    在这里插入图片描述

    展开全文
  • 用Verilog实现串并转换

    千次阅读 2020-05-11 19:18:19
    一、串转并转换模块 1) 利用移位寄存器 串行转并行数据输出:采用位拼接技术(移位寄存器),将串行的数据总数先表示出来,然后发送一位数据加一,后面的接收的这样标志:data_o <= {data_o[6:0],data_i };1...

    一、串转并转换模块

    串转并就是将低3位信号和输入信号一起赋值。因为经过转换后,码元速率会将为原来四分之一,所以设置4分频时钟,将其输出。而并转串就是不断右移,取高位输出。

    module serial_par(
        input clk,
        input d,
        output reg [3:0]q
    );
    
    //四分频模块
    reg [13:0]cnt;
    parameter N = 4;
    reg clk_out;
    always @(posedge clk)
    begin
        if(cnt == N/2 - 1)begin
        	cnt <= 14'b0;
        	clk_out <= ~clk_out;
        end 
        else
    	cnt <= cnt + 1'b1;
    end
    
    reg [3:0]data;
    always @(posedge clk)
    begin
        data <= {data[2:0],d};
    end
    
    always @(posedge clk_out)
    begin
        q <= data;
    end
    
    endmodule

    1) 利用移位寄存器

            串行转并行数据输出:采用位拼接技术(移位寄存器),将串行的数据总数先表示出来,然后发送一位数据加一,后面的接收的这样标志:
    data_o <= {data_o[6:0],data_i };
    1输入8输出 的 串转并模块的Verilog代码

    module serial_parallel(
        input           clk,
        input           rst_n,en,
        input           data_i,   //一位输入
        output   reg [7:0] data_o	//8位并行输出
        );
    
    always @(posedge clk or negedge rst_n) begin
    	if (rst_n == 1'b0)
    		data_o <= 8'b0;
    	else if (en == 1'b1)
    		data_o <= {data_o[6:0], data_i};	//低位先赋值
    		//data_o <= {data_i,data_o[7:1],};	//高位先赋值
    	else
    		data_o <= data_o;
    end
    
    endmodule
    

     2)利用计数器

              利用计数器cnt 时钟计数,开始数据先给高位,每过一个时钟周期,数据便给低一位。这样便可以达到串转并的效果

    1输入8输出 的 串转并模块的Verilog代码

    module serial_parallel(
        input           clk,
        input           rst_n,
        input           data_i,
        output   reg [7:0] data_o
    );
    
    //msb first   most significant bit 表示二进制数据的最高位
    reg     [2:0]   cnt; 	//计数器0-7  
    always @(posedge clk or negedge rst_n)begin
        if(rst_n == 1'b0)begin
            data_o <= 8'b0;
            cnt <= 3'd0;
        end
        else begin
            data_o[7 - cnt] <= data_i;	高位先赋值
            cnt <= cnt + 1'b1;
        end
    end
    
    /*
    //lsb first	(least significant bit) 表示二进制数据的最低位
    
    reg     [2:0]   cnt;
    always @(posedge clk or negedge rst_n)begin
        if(rst_n == 1'b0)begin
            data_o <= 8'b0;
            cnt <= 3'd0;
        end
        else begin
            data_o[cnt] <= data_i;   //低位先赋值
            cnt <= cnt + 1'b1;
        end
    end
    */
    
    endmodule
    

     二、并转串转换模块

    en为输入有效脉冲,每四个脉冲输出高电平

    module par_serial(
        input clk,
        input [3:0]d,
        input en,
        output q
    );
    reg[2:0]cnt;
    always @(posedge clk)
    begin
        if(cnt == 3)begin
            en <= 1;
            cnt <= 0;
        end
        else begin
            en <= 0;
            cnt <= cnt + 1'b1;
        end
    end
    
    reg[3:0]data;
    always @(posedge clk)
    begin
        if(en)
            data <= d;
        else 
            data <= data << 1;
    end
    assign q = data[3];
    
    endmodule

    并串转换的原理是:
    先将八位数据暂存于一个四位寄存器器中,然后左移输出到一位输出端口,这里通过一个“移位”指令。

    1)用寄存器移位实现,8输入1输出 的 并转串模块的Verilog代码

    module parallel_serial(
    clk, rst_n, en, data_i, data_o
        );
    input clk, rst_n,en;
    input [7:0] data_i;
    output  data_o;
    
    reg [7:0]  data_buf;
    always @(posedge clk or negedge rst_i) begin
    	if (rst_i == 1'b0) begin
    		data_o <= 1'b0;
    		data_buf <= 8'b0;
    	end
    	else if (en == 1'b1)
    		data_buf <= data_i;
    	else
    		data_buf <= data_buf <<1; 	//将寄存器内的值左移,依次读出
    		//data_buf <= {data_buf[6:0],1'b0};
    end
    
    assign data_o = data_buf[7];
    
    endmodule
    

    使能信号en表示开始执行并转串操作,由于并转串是移位操作,当一次并转串完成后,需要重新载入待转换的并行数据时,使能信号要再起来一次 

    2)用计数器实现

    module b_c(clk,rst_n,en,d,q);
    input clk,rst_n;
    input [3:0]d;
    output reg en;
    output reg q;
    
    reg [3:0]count;
    reg [3:0]data;
    always @(posedge clk or negedge rst_n)
    begin
        if(rst_n==0)
        begin
           count<=0;
           en<=0;;
           data<=d;
           q<=0;
        end
        else
        begin
           if(count<4)
           begin
               count<=count+1;
               en<=1;
               data<={data[2:0],data[3]};
               q<=data[3];
           end
           else
           begin
           count<=0;
           en<=0;
           q<=0;
           end
        end
    end
    endmodule

     

     

    展开全文
  • FPGA中的简单并串,串并转换

    千次阅读 2018-10-28 22:29:51
    从图中可以看出,并串转换原理是:先将四位数据暂存于一个四位寄存器器中,然后左移输出到一位输出端口,这里通过一个“移位”指令就ok了。 如: module para_serial( clk, rst_n, en, //外部待传输数据输入 ...

    1.并串转换

    用verilog实现四位串并转换和并串转换

    从图中可以看出,并串转换的原理是:先将四位数据暂存于一个四位寄存器器中,然后左移输出到一位输出端口,这里通过一个“移位”指令就ok了。

    如:

    module para_serial(
    clk,
    rst_n,
    en,  //外部待传输数据输入
    sda  //三态数据输入
    );
    
    input wire clk;
    input wire rst_n;
    output reg sda;
    output reg en;
    
    reg [7:0]sda_buf;
    reg [3:0]counter;
    
    
    
    //计数器
    always@(posedge clk or negedge rst_n)
    	begin
    		if(!rst_n)
    			begin
    				sda<=0;
    				sda_buf<=8'b1001_1101;
    				counter<=0;
    				en<=0;
    			end
    		else
    			begin
    				if(counter<8)
    					begin
    						en<=1;
    						counter<=counter+1'b1;
    						sda_buf<={sda_buf[6:0],sda_buf[7]};
    						sda<=sda_buf[7];
    					end
    				else
    					begin
    						counter<=0;
    						sda<=0;
    						en<=0;
    					end
    			end
    	end
    	
    
    
    
    endmodule 

    2.串并转换

    用verilog实现四位串并转换和并串转换

    从图中可以看出,串并转换的原理是:新输入的位值成为原来数据的最低位,将原来数据的最高位舍去,这里可以通过一个简单的“连接符”就能搞定。

    reg [7:0]sda_reg;
    //wire en;
    
    always@(posedge clk or negedge rst_n)
    	begin
    		if(!rst_n)
    			begin
    				sda_reg<=0;
    			end
    		else
    			begin
    				if(en)
    					begin
    						sda_reg<={sda_reg[6:0],sda};  //将并转串模块输出的串行数据sda转入sda_reg的每一位(从低位到高位)
    					end
    				else
    					begin
    						sda_reg<=0;
    					end
    			end
    	end
    	
    

     

    展开全文
  • verilog笔记(一)——串并转换

    千次阅读 2021-03-07 09:28:15
    FPGA中的串并转换 1、串并转换的思想 FPGA中的串并转换主要设计思想来源于用面积换速度,对数据流进行管理,FPGA中实现串并转换的主要方式有双口RAM,FIFO,移位寄存器等,对于数据量较大的一般使用双口RAM或者FIFO...

    FPGA中的串并转换

    1、串并转换的思想

    FPGA中的串并转换主要设计思想来源于用面积换速度,对数据流进行管理,FPGA中实现串并转换的主要方式有双口RAM,FIFO,移位寄存器等,对于数据量较大的一般使用双口RAM或者FIFO实现,数据量较小的使用移位寄存器实现。

    2.串并转换的移位寄存器实现

    代码如下:

    module S2P(
    	input			clk_bit,
    	input			bit_valid,
    	input			bit_data,
    
    	output	[1:0]	para_data,
    	output			para_valid
    
        );
    	
    	reg		[1:0]	shift_data_reg = 2'b0;		//移位寄存器
    	reg 	[1:0]	shift_cnt;					//移位计数
    	reg 			para_valid_reg = 0;			//数据有效使能
    	reg 	[1:0]	para_data_reg;
    	
    
    	assign para_data = shift_data_reg;
    	assign para_valid = para_valid_reg;
    
    	always @(posedge clk_bit) begin
    		if (bit_valid) begin
    			shift_data_reg <= {shift_data_reg[0],bit_data};
    
    			if (shift_cnt) begin				
    				para_valid_reg <= 1;
    				shift_cnt <= 0;
    			end
    			else begin
    				shift_cnt <= shift_cnt + 1;
    				para_valid_reg <= 0;
    			end
    		end
    		else begin
    			shift_data_reg <= 2'b0;
    			shift_cnt <= 0;
    			para_valid_reg <= 0;
    		end
    	end
    endmodule
    

    利用移位寄存器设计串并转换,采样使能端高电平才为有效数据。仿真结果如下:
    后续采样时钟在para_valid使能信号为高电平时对并行输出信号采样,即可得到正确的并行输出信号


    展开全文
  • 串并转换和16位转8位

    千次阅读 2017-12-12 22:22:26
    串并转换需要用到移位寄存器,窜到并可以使用大括号进行移位保存。并到窜使用输出引出线引出其中一位。 16位转8位需要计数器,计数值...串并转换原理是:新输入的位值成为原来数据的最低位,将原来数据的最高位舍去
  • 4位串并转换器 1位全加器

    千次阅读 2014-07-13 21:10:20
    4位串并转换
  • 从FDM到OFDM 版权声明:本博客内容来自于个人学习过程中的总结,参考了互联网、数据手册、帮助文档、书本以及论文等...FDM(频分复用)原理:将已有的带宽分为多个部分,将不同信号调制到不同频域上,接收方通过特定...
  • 大学数字电路课程设计 串并-并串转换器的设计
  • 串/并转换

    千次阅读 2016-10-21 14:41:03
    串/并转换是高速数据流处理的重要技巧之一。串/并转换的实现方法多种多样,根据数据的顺序与数量的要求,可以选用寄存器、双口RAM(Dual RAM)、SRAM、SDRAM、FIFO等实现。对于数量比较小的设计可以采用移位寄存器...
  • SerDes---串并转换

    千次阅读 2018-08-26 15:37:20
    一种时分多路复用(TDM)、点对点通信技术,即在发送端多路低速并行信号被转换成高速串行信号,经过传输媒介(光缆或铜线),最后在接收端高速串行信号重新转换成低速并行信号,这种点对点的串行通信技术充分利用...
  • 提出了一种新型的40 Gb/s全光串并转换(AOSPC)的实现方案,该系统主要由波分/时分脉冲光源的产生与顺序多波长变换两个部分构成。实现了信道波长数目和重复频率可调的波时分脉冲光源;分析了基于单个半导体光放大器...
  • 想法:程序中我是直接判断启动脉冲来了就去状态跳转、转换数据,所以仿真限号得设置i_cpu_data 的在启动脉冲前赋值。 觉得状态的切换可以再设置一点东西,判断一下这是的r_cpu_data 是不是被赋值了(可能数据i_cpu_...
  • 附带原理图 可通过调试 仿真 结果无错,是有关VHDL实现单片机输出的串并转换
  • 74LS164串转并实验本实验是用74LS164把输入的串行数转换成并行数输出,74LS164为串行输入并行输出移位寄存器,其引脚图及功能如下:A、B:串行输入端;QA~QH:并行输出端;CLR:清零端,低电平有效;CLK:时钟脉冲...
  • 数字IC设计-FPGA——用Verilog实现串并转换 一、串转并转换模块 1. 利用移位寄存器 2. 利用计数器 input clk, rst_n, data_i; output [7:0] data_o; module Deserialize( input clk, input rst_n, input data_i, ...
  • Xilinx-7-SelectIO-ISERDESE2-串并转换

    千次阅读 2019-10-28 10:45:50
    ISERDESE2是专用的串并转换器,它在完成串并转换时并不会带来多余的时序上的问题,从而很适合应用到高速源同步应用中。比如摄像头数据。
  • 用Verilog实现串并和并串转换

    千次阅读 2021-01-13 20:32:02
    首先我们先要了并串和串并转换原理 并串转换:先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,这里可以通过一个“移位”来实现,相当于实现了移位寄存器的功能。 串并转换:新输入的位值...
  • 8bit串并变换电路

    2021-03-22 22:51:09
    题目概述 此题目为我专业的一道作业题,8bit串并变换电路,说明:,串行...串并转换的主体为八位二进制移位寄存器,移位寄存器的工作方式例如:b8,1011 1000 移入一个1,结果为1110001,16进制结果为71 工作波形 ...
  • 二进制原理浅谈

    千次阅读 2019-12-01 20:54:57
    比如我们熟知的text,music,vedio等等最终都会转换为二进制数据存储在我们的硬盘上,读取的时候也是读取二进制数据。 计算机中数据存储的基本单位是字节,一个字节等于8位,8位的二进制最大可以表示28-1=...
  • EDA 电子设计自动化VHDL系列课程9 – 串-并移位寄存器的VHDL设计 本EDA系列介绍的系统环境是: 软件: VHDL编程语言 ;...原理: 输入 一个 4位 并行信号 plin,将其 转换成 串行信号 slout ,在clo...
  • 在此介绍了串并/并串转换器基本原理, 并通过 Quartus Ⅱ 仿真平台进行仿真验证, 最后下载到 FPGA 芯片 EP1K30QC208⁃2实现了串并/并串转换器的设计, 仿真及实验结果表明采用此设计方案是可行的
  • 输入二进制串并转换为16进制数显示到屏幕 的汇编程序 在编写过程中遇到一些问题,并解决后,想把它与大家分享。 题目是这样的: 分析题目: 可得要求 输入 11111111 得到 00FFH 那么思路就是: 0.输入类似11111111...
  • 51单片机串行口并/串、串/并转换实验 一、实验内容 利用MCS-51单片机P1.2做控制信号(把并转串单元的LOCK和串转并单元的LOCK连接至P1.2。),实现并转串、串转并,并把串转并的数据送到发光二极管单元显示。 二、...
  • 51单片机串-并转换实验

    千次阅读 2008-01-17 16:09:00
    2006-05-11 09:54:40 51单片机串-并转换实验 一.实验要求利用8031串行口,和并行输出串行移位寄存器74LS164,扩展一位数码显示在数码显示器上循环显示0-9这10个数字。二.实验目的1.掌握8031串行口方式0...
  • 这就是一个简单转化,当然啦,复杂转化的原理也是一样的。 还有就是好多人以为加密和解密操作很难,其实,通过字符串与二进制数组之间的转化就可以实现加密的操作啦,这个大家就自己研究下吧。我给大家提个思路,...
  • 通信原理System view 仿真实例,用System view软件将通信原理教程的各个章节进行了仿真,可以复制通信技术学习
  • 通信原理QPSK实验报告,完整电路截图,各模块关键参数说明。 【实验结果及分析】 1.信噪比对接收信号的影响 给出接收端几个不同信噪比下的星座图,说明信噪比如何影响星座图变化。 2.QPSK 系统的误码率曲线 给...
  • 1:PCM编码、译码 2:2PSK调制 3:串并/并串转换 4:眼图,瀑布图,功率谱

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,193
精华内容 477
关键字:

串并转换原理