精华内容
下载资源
问答
  • verilog 串并转换电路
    2021-09-24 10:59:14

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

    一、串转并

    1位串行数据转8位并行数据

    module serial2parallel(
        input           clk,
        input           rst_n,
        input           data_valid_i,
        input           data_in,   //一位输入
        output   reg    data_valid_o,
        output   reg [7:0] data_out	//8位并行输出
    更多相关内容
  • 并串转换电路在通信接口中具有广泛的应用,可编程逻辑阵列由于具备灵活、可重构等特点非常适应于串转换硬件电路的实现。为了解决硬件电路结构中资源与性能的矛盾,分析比较了移位寄存器、计数器与组合逻辑条件判定...
  • quartus环境下工程,自己写的sipo和piso两个模块,用verilog分别实现串并转换和并串转换,通俗易懂
  • 大学数字电路课程设计 串并-并串转换器的设计
  •  下面是并串转换器的 Verilog代码实现: module Pal2Serial( // 四位并串转换程序:PiSo_Shift = 4 input Clk, input Load,// 输入数据加载信号 input [3:0] din,// 4 位并行输入数据 output reg dout = 1'b0...

    摘要:设计的思想是这样的:我们先将 N 位并行的数据(N 根线)暂时寄存在一个 N 位的寄存器中,然后通过移位寄存器的移位,依次输出到一位输出端口即可实现并串转化。

    并串转换器  

    下面是并串转换器的 Verilog 代码实现:

    module Pal2Serial( // 四位并串转换程序:PiSo_Shift = 4
        input Clk,
        input Load, // 输入数据加载信号
        input [3:0] din, // 4 位并行输入数据
        output dout // 1 位串行输出数据
        );
    
       reg [3:0] databuff = 4'b0000; // 中间缓冲通道
    
       always @(posedge Clk)
          if (Load) 
             databuff <= din;
          else
             databuff <= databuff << 1;
    
    assign dout = databuff[3];
    
    endmodule

       其 RTL 电路图如下所示:

    展开全文
  • 基于FPGA的高速串并_并串转换器设计.pdf
  • 本文给大家分享了一个简单的电平转换电路图。
  • 并串转换:先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,这里可以通过一个“移位”来实现,相当于实现了移位寄存器的功能。 串并转换:新输入的位值成为原来数据的最低位,将原来数据的最高...

    用Verilog实现串并和并串转换

    一、了解并串和串并转换的原理

    串行数据输出是将组成数据和字符的码元按时序逐位予以传输,并行数据传输是将固定位数(通常为8位或16位等)的数据和字符码元同时传输至接收端,串并转换是完成这两种传输方式之间转换的技术。

    例如:需要传输的数据有32bit,用串行传输则需要32个时钟周期完成传输,如果用8位并行传输,则32bit数据只需要4个时钟周期就可以完成传输。

    并串转换

    并转串电路主要由时钟(clk)、复位信号(rst)、并行输入信号(pdin)、串行输出信号(sdout)和使能信号(en)组成。使能信号表示开始执行并转串操作,由于并转串是移位操作,先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,通过一个“移位”来实现,当一次并转串完成后,需要重新载入待转换的并行数据时,使能信号要再起来一次。

    串并转换

    输入一位的数据,每一个clk接收一位,最终以多位(8位)的形式输出。通常采用位拼接的方式来实现。典型的案例,给一位输入,实现8位数据的左移和右移操作。

    右移:舍弃低位,高位补输入的值
    左移:舍弃高位,低位补输入的值。

    转换可以采用两种方式实现

    一:lsb优先 Least Significant Bit,最低比特,最低位优先
    二:msb优先 Most Significant Bit,最高比特,最高位优先


    二、串转并(以一输入八输出为例)

    2.1 Verilog实现左移和右移

    通过位拼接运算符来进行高位舍去,实现左移

    module Deserialize(
        input           clk,
        input           rst_n,
        input         data_i,
        output   reg [7:0] data_o
        );
    
    //lsb first
    
    always @(posedge clk or negedge rst_n)begin
        if(rst_n == 1'b0)begin
            data_o <= 8'b0;
        end
        else begin
            data_o <= {data_o[6:0], data_i}; //去掉了高位,让data_i来代替高位,相当于左移一位
        end
    end
    endmodule
    

    补充: 截取数据的不同位数进行拼接:

     例:    data1 = 0101_1101
             data2 = 1011_0011
             data = {data1[3:0],data2[7:4]}
            则可得:data = 1101_1011
    

    testbench仿真

    `timescale 1ns/1ns
    `define clock_period 20
    
    module Deserialize_tb;
       reg clk;
    	reg rst_n;
    	reg data_i;
    	
    wire [7:0] data_o;
    
    
    Deserialize  Deserialize_0(
      .clk(clk),
      .rst_n(rst_n),
      .data_i(data_i),
      .data_o(data_o)
      );
    
      initial clk = 1;
      
      always #(`clock_period/2) clk = ~clk;
      
      
      initial begin
    	   rst_n=0;
    		data_i=0;
    	
     #(`clock_period*200)
       rst_n=1;
     #(`clock_period*200)
      data_i=1;
       #(`clock_period*200)
      $stop;
      end
      
      endmodule 
    

    波形图如下,可看到输入为0的时候,输出一直是00000000,当输入为高电平,即可用输入的1来补低位,从而高位被舍弃,也就实现了左移的操作。
    在这里插入图片描述
    分析:每当clk上升沿且rst_n=1时变化,开始时data_i=0,此时data_o=0000_0000,当data_i=1时,则 data_o <= {data_o[6:0], data_i};data_o=0000_0001,实现了高位舍弃,低位用data_i作为新输入的数据来成为data_o的最低位。

    至此,我们可以继续尝试右移的写法。
    核心代码如下:

    data_o <= {data_in,data_o[7:1]}; //右移
    

    2.2 msb最高位优先(利用计数器实现串转并)

    代码:

    module invert(input  in,input clk,input rst_n, output reg  [2:0] cnt,output reg [7:0] out);      
    
    	always@(posedge clk)  
            if(!rst_n)begin
                out <= 8'd0;
                cnt <= 3'd0;
        end
            else if(cnt == 3'd7)
               cnt <= 3'd0;
           else begin
                cnt <= cnt + 1'd1;
               out[7-cnt] <= in; //输入补最高位,实现右移.//用计数来进行7-0的移位操作  
           end
           endmodule
    

    tb文件:

    `timescale 1ps/1ps
    	module nvert_tb ();
    	reg clk=0;
        reg rst_n;
        wire  [2:0] cnt;
        wire [7:0]out;
    	always #5 clk = ~clk;  // Create clock with period=10
     
        reg   in;
    	initial begin
            rst_n = 0;
            in = 1;
            #10;
            rst_n = 1;
            #6;
            in = 1;
            #80;
            in = 0;
    		$display ("The current time is (%0d ps)", $time);
    		#100 $finish;            // Quit the simulation
    	end
    
        invert inst1 ( .in(in) ,.clk(clk),.rst_n(rst_n),.cnt(cnt),.out(out) );   // Sub-modules work too.
    
    endmodule
    

    波形图
    可看到,输入in = 1,在clk上升沿,接收输入in的值,补高位,从而实现了右移。
    在这里插入图片描述

    2.3 LSB最低位优先

    至此,我们可以继续尝试LSB最低位优先的写法。
    核心代码如下:

       out[cnt] <= in; //输入补最高位,实现左移
    

    波形如下:
    在这里插入图片描述

    三、并转串(以八输入一输出为例)

    采用计数器的方式实现移位

    cnt : 0-7 的计数,因此将in从低位开始输出。

    module invert(input [7:0] in,input clk,input rst_n, output reg  [2:0] cnt,output reg  out);      
    
    	always@(posedge clk)  
            if(!rst_n)begin
                out <= 3'd0;
                cnt <= 3'd0;
        end
            else if(cnt == 3'd7)
               cnt <= 3'd0;
           else begin
                cnt <= cnt + 1'd1;
               out <= in[cnt]; 
        end
    endmodule
    

    如下可以看到,给八位输入,最终得到一位输出。
    同时,当cnt=0的时候,在下一clk上升沿,输出00000001最低位为1,cnt=1,输出00000111 中的in[1]为1,cnt = 2 ,输出1;cnt = 3 输出in[3]为0,以此类推。
    在这里插入图片描述

    运算符实现移位

    module invert(input [7:0]  in,input clk,input rst_n,input en,output   out);   
        reg  [7:0] shift_out;
        
    	always@(posedge clk)  
            if(!rst_n)
                shift_out <= 0;
            else if(en == 1)
               shift_out <= in; 
            else
            shift_out <= shift_out <<1;
        assign out = shift_out[7];
    

    tb文件:

    `timecasle 1ps/1ps
    module top_module ();
    	reg clk=0;
        reg rst_n;
        reg en;
        wire out;
    	always #5 clk = ~clk;  // Create clock with period=10
    
        reg   [7:0] in;
    	initial begin
            rst_n = 0;
            in = 1;
            en = 0;
            #10;
            rst_n = 1;
            #10;
            en = 1; //可以将in给shifout暂存
            #10
            en = 0; //开始移位
            #80; 
            en = 1;
            in = 8'b00000111;
            #10;
            en = 0;
            #10;
            en = 0;
            #80;
            in = 0;
    		$display ("The current time is (%0d ps)", $time);
    		#120 $finish;            // Quit the simulation
    	end
    
        invert inst1 ( .in(in) ,.clk(clk),.rst_n(rst_n),.en(en),.out(out) );   // Sub-modules work too.
    
    endmodule
    

    在这里插入图片描述

    串入串出移位寄存器

    如下是8个D触发器构成的八位移位寄存器。数据在时钟下一位一位的传输,实现数据的先入先出。
    在这里插入图片描述
    这里直接采用在线的HDLBits仿真器进行仿真。代码如下:

    module top_module ();
    	reg clk=0;
    	always #5 clk = ~clk;  // Create clock with period=10
    	initial `probe_start;   // Start the timing diagram
    
    	`probe(clk);        // Probe signal "clk"
    
    	reg in=0;
        wire out;
    	initial begin
    		#10 in = 1;
    		#10 in = 0;
    		#20 in = 1;
    		#20 in = 0;
    		$display ("Hello world! The current time is (%0d ps)", $time);
    		#100 $finish;            // Quit the simulation
    	end
    
    	   invert inst1 ( .in(in) ,.clk(clk),.out(out) );    // Sub-modules work too.
    
    endmodule
    
    module invert(input in,input clk,output reg out );
    	reg tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7;   
    
    	always@(posedge clk)  
          	begin	
    		tmp1<=in;	
    		tmp2<=tmp1;	
    		tmp3<=tmp2;	
    		tmp4<=tmp3;	
    		tmp5<=tmp4;	
    		tmp6<=tmp5;	
    		tmp7<=tmp6;	
    		out<=tmp7; 
            end
            `probe(in);	// Sub-modules can also have `probe()
            `probe(out);
    endmodule
    
    

    可看出,当out一开始是未知的,8个clk之前都是未知,当第九个clk上升沿的时候,开始输出in的数据。
    在这里插入图片描述

    展开全文
  • 三极管的电平转换及驱动电路分析。
  • 设计了一种基于二输入异或门的串口电平转换电路,简易地实现TTL电平与RS-232兼容电平的转换.通过分析PC端与单片机端串口通信的特点,提出了一种以二输入4异或门74AHC86及二极管稳压电路组成的电平转换电路,该电路成本...
  • I-V转换最简单的方式就是一个电阻,如图a,一般大电流的时候使用采样电阻R即可实现IV转换,再加上运放放大或者射随就可以ADC模块直接采集,在这里我们介绍的是微弱电流的IV转换,一般采用b形式的跨阻放大电路。...
  • DB9转TTL电平的串口转换电路原理图和PCB
  • 介绍了一种基于C8051F502单片机的CAN总线和串口转换电路,介绍了电路的基本器件选型,对软件的设计思路与流程进行了详细描述。通过测试,证明此种转换方式高速可靠,可广泛应用。
  • 本文主要介绍的是ZigBee串口数据转换电路设计。
  • 电子政务-用于计算机的串口转换电路.zip
  • 该USB转转换器是一款基于非常流行且受大家特别欢迎的驱动芯片CH340设计,输出接口支持3.3V或5V电压选择,USB < - >串行转换器(电源和串行线路),其特性: 实现CH340,这是一款受到芯片制造商非常好的驱动...
  • MAX9247:27位2.5MHz-42MHz DC平衡并串转换器,能把27位(18位视频数据和9位控制数据)并行数据转换成串行数据流,预加重改善了输出的眼图和信号完整性,有所有权的数据编码降低了EMI和提供了DC平衡,LVDS输出是内部100欧姆...
  • 电路知识分享】利用三极管转换串口电平信号 在3.3V单片机和5V单片机串口通讯时,需要将电平信号进行转换。 串口电平转换参考电路 参考一 参考二 参考电路三 上述内容仅供参考,自行理解。 ...

    【电路知识分享】利用三极管转换串口电平信号


    在3.3V单片机和5V单片机串口通讯时,需要将电平信号进行转换。

    串口电平转换参考电路

    • 参考一

    在这里插入图片描述

    • 参考二
      在这里插入图片描述
    • 参考电路三
      在这里插入图片描述

    上述内容仅供参考,自行理解。

    展开全文
  • 行业资料-电子功用-并串转换单管控制高增益直流升压变换电路
  • 串口电平转换参考电路

    千次阅读 2019-07-16 10:00:28
    大家在设计电路的时候经常会遇到不同电压系统之间串口通信问题,今天刚好看到一个比较出色的设计,现在分享给大家,希望对大家有所帮助,如果大家还有其他类似的电路也可以一起分享。 ...
  • 设计的思想是这样的:有一组数据以 N MHz 的速率从 FPGA 的一个 I/O 口传入,要...下面是串并转换器的 Verilog代码实现: module Serial2Pal( input Clk, input din, input ena, output reg [3:0] dout = 4'b00.
  • 那么其产生的高电平则为2.2V那么如果你要是用串口通信模块,并且是3.3V或者5V供电的模块,那么你会发现串口助手没有数据被接收到),那么此时便需要一个电平转换电路:其实就是把主机发送的高电平变为接收数据的从...
  • Agilent科技推出了业界尺寸最小的4端口串并/并串转换器(SerDes),特别针对光纤通道存储区域网(SAN)设备而设计,用来在服务器及较大公司数据中心之间存储和传送数据。器件具有业界最小的尺寸19mm×19mm,为光纤通道 ...
  • 提出了一种新的树型结构10∶1并串转换电路,可应用于千兆以太网,其工作速度达到125Gbit/s。树型结构的使用可以使大部分电路工作在较低的速率上,从而简化了设计,也减小了功耗。低速5∶1串转换单元采用改进的并行...
  • sbus转口-电路方案

    2021-04-20 15:07:06
    将航模所用的SBUS信号翻转成为标准串口信号,信号电平3.3,5v电平和3.3电平都是兼容的
  • 8bit串并变换电路

    2021-03-22 22:51:09
    此题目为我专业的一道作业题,8bit串并变换电路,说明:,串行数据输入,MSB在前,伴有1bit的MSB的指示信号,连续码流输入,并行输出,伴有1bit的指示信号,要求完整电路图,子模块原理图/流程图,工作波形,电路...
  •  电压频率转换器也称为电压控制振荡电路(VCO),简称压控振荡电路。电压—频率转换实际上是一种模拟量和数字量之间的转换技术。当模拟信号(电压或电流)转换为数字信号时,转换器的输出是一频率正比于模拟信号...
  • 串并 并串转换

    2013-05-10 23:01:25
    用VHDL实现串并转换 并串转换。用modelism仿真验证程序可以使用。
  • EDA C
  • 这样电路有好多种,一般来说商业化的成品会用到MAX232,DS275等专用的RS232、TTL电平转换集成电路,对于普通电子爱好者来说使用这样的器件一来不太好购买,二来使制作的费用提高,那用什么样的电路去代替它们呢?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,470
精华内容 13,788
关键字:

并串转换电路