精华内容
下载资源
问答
  • 并行输入串行输出
    万次阅读
    2020-02-20 21:36:00

    1 概念

    移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、序列码检测器,进行数值运算以及数据处理等,它也是数字系统中应用非常广泛的时序逻辑部件之一。

    有四种不同类型的移位寄存器可用数据输入和输出设备的方式不同:

    串行输入,串行输出

    串行输入,并行输出

    并行输入,串行输出

    并行输入,并行输出
    在这里插入图片描述
    右移位寄存器的特点是右边寄存器的次态等于左边触发器的现态。串行输出数据从触发器FD的QD端输出,并行数据从个触发器的QA~QD端输出,两种输出方式都属于同向输出。各触发器都采用同一时钟信号,所以它们工作在同步状态。如果将FD的输出端QD接到FA的输入端DI,则可以构成循环移位的右移位寄存器。

    右移寄存器

    并行输入串行输出

    module right_shift_pin_sout(
        clk    ,
        rst_n  ,
        //其他信号,举例dout
        sout,
        pin    
        );
    
        //参数定义
        parameter      DATA_W =         4;
        parameter    CNT_W=2;
    
        //输入信号定义
        input               clk    ;
        input               rst_n  ;
        input [DATA_W-1: 0] pin    ;
    
        //输出信号定义
        output  sout   ;
    
    
    
        //中间信号定义
        reg[CNT_W-1: 0]     cnt    ;
        wire [DATA_W-1: 0]   D    ;
    
        reg [DATA_W-1: 0]   Q    ;
        //计数
        always@(posedge clk or negedge rst_n)begin
            if(rst_n==1'b0)begin
                cnt<=0;
            end
            else begin
                if(cnt==DATA_W-1)begin
                    cnt<=0;
                end
                else begin
                    cnt<=cnt+1;
                end
             end
        end
        //D
        assign D=(cnt==0)?pin:4'b0;
        assign sout=Q[3];
        //sout
        always  @(posedge clk or negedge rst_n)begin
            if(rst_n==1'b0)begin
                sout<=0;
            end
            else begin
                sout<=Q[3];
            end
        end
    //Q
        always  @(posedge clk or negedge rst_n)begin
            if(rst_n==1'b0)begin
                Q<=0;
            end
            else if(cnt==0)begin
                Q<=D;
            end
            else begin
                Q[3:1]<=Q[2:0]; 
            end
        end
    
    
    
        endmodule
    
    
    

    tb

     `timescale 1 ns/1 ns
    
    module testbench_name();
    parameter      DATA_W =         4;
    parameter    CNT_W=2;
    //时钟和复位
    reg clk  ;
    reg rst_n;
     
    wire sout;  
    reg[DATA_W-1: 0]  pin ; 
            //时钟周期,单位为ns,可在此修改时钟周期。
            parameter CYCLE    = 20;
    
            //复位时间,此时表示复位3个时钟周期的时间。
            parameter RST_TIME = 3 ;
    
            //待测试的模块例化
            right_shift_pin_sout 
            #(.DATA_W(DATA_W),.CNT_W(CNT_W))  uut(
           .clk    (   clk    ), 
           .rst_n  (   rst_n  ), 
           .sout   (  sout   ),
           .pin    (   pin    ) 
                )  ;  
            
    
                //生成本地时钟50M
                initial begin
                    clk = 0;
                    forever
                    #(CYCLE/2)
                    clk=~clk;
                end
    
                //产生复位信号
                initial begin
                    rst_n = 1;
                    #2;
                    rst_n = 0;
                    #(CYCLE*RST_TIME);
                    rst_n = 1;
                end
    
                //输入信号pin赋值方式
                initial begin
                    #1;
                    //赋初值
                    pin =4'b1111;
                    #(9*CYCLE);
                    pin=4'b1000;
                    #(9*CYCLE);
                    pin=4'b0010;
                    #(9*CYCLE);
                    pin=4'b0001;
                    //开始赋值
    
                end
    
    endmodule
    
    
    
    更多相关内容
  • 并行输入串行输出

    2022-03-06 21:25:52
    利用有限状态机将并行输入的数据转换为串行输出。初学veirlog,如有错误,敬请指出。

    利用有限状态机将并行输入的数据转换为串行输出,初学veirlog,如有错误,敬请指出。

    1.RTL代码

    module par2ser(in,
    	       en,
    	       clk,
    	       rst,
    	       ack,
           	   out,
           	   valid);
    
    input in;
    input clk;
    input rst;
    input en;
    output out;
    output valid;//when output signal is becoming valid, valid = 1
    output ack;// ask for new info
    
    wire[3:0] in;
    reg out;
    reg[3:0] curr_state;
    reg[3:0] next_state;
    
    parameter IDLE = 3'b000,
    	  BIT1 = 3'b001,
    	  BIT2 = 3'b011,
    	  BIT3 = 3'b010,
    	  BIT4 = 3'b110,
    	  FINISH = 3'b111,//finish recieving info
    	  READY = 3'b101;//ready for recieve info
    
    always@(posedge clk or negedge rst) begin 
    
    	if(~rst)
    		curr_state <= IDLE;
    	else
    		curr_state <= next_state;
    
    end
    
    always@(*) begin
    
    	case(curr_state)
    	IDLE:begin
    		if(en)
    			next_state = READY;
    		else
    			next_state = IDLE;
    	end
    	READY:
    		next_state = BIT1;
    	BIT1:
    		next_state = BIT2;
    	BIT2:
    		next_state = BIT3;
    	BIT3:
    		next_state = BIT4;
    	BIT4:
    		next_state = FINISH;
    	FINISH:
    		next_state = IDLE;
    
    	default:next_state = IDLE;
    	endcase
    end
    
    always@(posedge clk or negedge rst) begin
    
    	if(~rst)
    		out <= 0;
    	else begin
    		case(curr_state)
    			BIT1:
    				out <= in[0];
    			BIT2:
    				out <= in[1];
    			BIT3:
    				out <= in[2];
    			BIT4:
    				out <= in[3];
    			default:out <= 0;
    		endcase
    	end
    end
    
    assign ack = (curr_state == FINISH);
    assign valid = (curr_state == BIT1);
    
    endmodule
    

    2.testbench

    module par2sertb;
    
    reg clk;
    reg rst;
    reg en;
    reg[3:0]in;
    wire out;
    wire ack;
    wire valid;
    
    initial begin
    	
    	`ifdef VCD 
    		$vcdpluson;
    	`endif
    	rst = 0;
    	en = 0;
    	in = 0;
    	#100 rst = 1;
    	#100 en = 1;
    	#10000 $finish;
    end
    
    initial begin
    	
    	clk = 0;
    	forever #10 clk = ~clk;
    end
    
    always@(negedge ack) begin
    
    	in = {$random} % 15;
    
    end
    
    par2ser u(.clk(clk),.rst(rst),.en(en),.out(out),.in(in),.ack(ack),.valid(valid));
    
    endmodule
    

    3.波形
    波形

    展开全文
  • Verilog 并行输入 串行输出+数据更新

    千次阅读 2020-10-31 09:30:25
    笔者看网上大多数有关Verilog并转串程序实践性较差,要么输出延时较大,要么不支持输入数据更新输出,还有的就是从低位到高位输出(个人觉得不大方便)。 那么废话少说,直接看代码,注释个人认为比较详细了,就不...

    Verilog 并行输入 串行输出+数据更新

    和别的并转串不同的是这次是并转串plus

    ** 笔者看网上大多数有关Verilog并转串程序实践性较差,要么输出延时较大,要么不支持输入数据更新输出,还有的就是从低位到高位输出(个人觉得不大方便)。
    那么废话少说,直接看代码,注释个人认为比较详细了,就不赘述了。

    //         并转串          //
    
    //   顺序:从高位到低位     //
    
    module pts (clk,datain,dataout); //rst,
                                          
    // input rst;
     input clk;                     //设置输入输出
     input[31:0] datain;
     output dataout;
     
     reg dataout;
     wire[31:0] datain;
     reg [5:0] counter;
     reg [31:0] jud;           //为判断输入数据是否更新设置此寄存器
    
     
    
     always@(posedge clk)  //or negedge rst
    
    begin 
     
        counter<=6'b100000;    //给计数值赋值;计数即输出位数
    //    jud<=datain;
               
    
    //  if(!rst)               //引脚复位不用,通过其他方式复位
    //	  begin
    //	   counter<=6'b100000;
    //	   dataout<=0;
    //	  end
    //	 else 
    
    
     if(counter==0)             //计数值为0时,进行复位判断(两个“大”循环之一),这个循环主要分析当计数值或者说输出位数到最后一位的情况
      begin
       if(jud==datain)          //输出位到最低位时,若被转换数据还未更新将不再输出(在if(counter==0)的循环中)
       begin
        dataout<=0;
    	 counter<=0;
       end
       else
    
       if(jud!==datain)         //输出位到最低位时,若被转换数据更新则计数复位(还在if(counter==0)的循环中)
        begin
         dataout<=0;
    	  counter<=6'b100000;
        end
      end
     else
    
    
     if(jud!==datain)           //当输入数据更新时(两个“大”循环之二),这个循环主要分析当输入更新时输出位数的更新情况
      begin
    	if(counter==6'b000000)   
        begin
    	  dataout<=0;
    	  counter<=0;
    	 end
    	else
    
    	begin                    //当位数不为0时,复位
    	  jud<=datain;
    	  dataout<=0;
    	  counter<=6'b100000;
    	 end
    	end
     else
    
    
     begin                       //并转串
    
    
      dataout=datain[counter-1];
      counter<=counter-1;
    
     end
     
    end
    endmodule
    

    实际工程上笔者用到的并不是这样的,不过主要部分就是这些了。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 1 Verilog描述 module shift_p2s( input clk, input [7:0] din, input load, output reg q ); reg [7:0] tmp; always@(posedge clk)begin if(load == 1...

    1 Verilog描述

    module shift_p2s(
        input         clk,
        input [7:0]    din,
        input         load,
        output reg     q
    );
        reg [7:0] tmp;
        
        always@(posedge clk)begin
            if(load == 1'b1)
                tmp <= din;
            else begin
                q <= tmp[7];
                tmp <= {tmp[6:0],1'b0};
            end
        end

    endmodule

    2 RTL视图

    3 功能仿真

    展开全文
  • 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出。这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integrated circuit)双向二线制串行总线协议为:只有总线处于“非忙”...
  • 74HC165驱动程序 74HC165并行输入串行输出移位寄存器的简单AVR驱动程序
  • FPGA输入端口:CLR ,CLK , ALE , WR , DATA_P0 [7..0] , DATA_P2[7..0] ; FPGA输出端口:SCLK , SDATA , LD ; 16并转16位同步串出
  • 它内建的CMOS位移寄存器与锁存功能,可以将串行输入数据转换成平行输出数据格式。芯片的输入电压范围值为3.3伏特至5伏特,提供16个恒定电流源,可以在每个输出级提供 3-45mA 的恒定电流量以驱动 LED。  特点: ...
  • 按照传统的串行输入/并行输出寄存器来解决,不考虑满时钟域到快时钟域的同步打拍问题。 源代码: module chuan_bing( input clka,clkb,//clka串行输入时钟,clkb并行输出时钟 input da,//串行输入数据 input ...
  • 51单片机串行口扩展并行输入输出Proteus仿真
  • 我们都知道通信从大的方面有两种:串行并行串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来...
  • 串行FIR实现 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Create Date: 2021/03/13 17:28:28 // Design Name: FIR滤波器全串行结构实现仿真 /...
  • 并行串行 串行并行输出模块

    千次阅读 2018-12-28 17:50:02
    并行转串行 串行转并行输出模块 夏宇闻Verilog 第15章学习...两个模块ptosda和out16hi,将ptosda并转串模块的串行输出给out16hi串转并模块,输出对应的高位电平 代码如下 //************************并行数据转一种...
  • 在一些电路中,我们需要对很多器件进行控制,但是...在这种情况下,采用串行并行芯片是一个很好的选择,通过串行的数据输入实现对并行器件的控制。 74HC595是一个典型的串行并行芯片,它的实物如下图所示 ...
  • 8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 英文资料
  • 8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 中文资料.rar
  • 它内建的CMOS位移寄存器与锁存功能,可以将串行输入数据转换成平行输出数据格式。芯片的输入电压范围值为3.3伏特至5伏特,提供16个恒定电流源,可以在每个输出级提供 3-45mA 的恒定电流量以驱动 LED。  特点: ...
  • 1、8位并行数据输入串行数据输出,采用移位方式,代码如下: module shift ( clk,rst_n, din,dout ); parameter Num=8; output dout; //串行数据输出 input clk; //控制时钟 input rst_n; //复位信号,...
  • 实验内容:51单片机的串行口连接74LS164进行串行/并行转换,然后输出到一个七段数码管。数码管循环显示0-9这10个数字。要求采用串行通信方式0,定时间隔1秒。 工具:proteus+keil #include<reg51.h> #...
  • 串行接收并行发送FIFO

    2012-01-05 00:17:55
    一个串行接收,并行发送的缓存器,其数据存储使用双端口SRAM(一读一写)实现,SRAM大小为深64、宽32位(64字×32位,使用提供的双端口SRAM见目录rf2shd4)。缓存器按一位串行输入接收数据,缓存器位置全满后不再...
  • 移位寄存器专题(verilog HDL设计)

    万次阅读 多人点赞 2018-05-19 21:09:11
    4、并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、...
  • 移位寄存器串进并出

    2021-06-17 21:20:03
    第三步:目的:并行输出数据。即数据并出 方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据 送入到输出锁存器。 说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是
  • 1 Verilog描述 module shift_s2s( input din, input clk, output reg dout ); reg tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,...//串行输入串行输出移位寄存器 /*8位移位寄存器由8个D触发器串联构成,在时钟 信号的作用...
  • 74HC595 - 串行并行

    2020-07-14 17:44:36
    1、串行并行 引脚图 逻辑框图 2、功能注释 芯片主要分为移位寄存器和锁存寄存器两大部分。移位寄存器存储串行输入的数据,锁存寄存器锁存移位寄存器内的数据。 1)SHIFT CLOCK:移位时钟输入引脚,上升沿将...
  • 移位寄存器

    千次阅读 2020-12-29 09:08:06
    (5) 保持:寄存器予置任意4位二进制数码abcd,令=1,S1=S0=0,加CP脉冲,...1.实现数据的串、并行转换(1)串行输入并行输出按图8-3-3-3接线,进行右移串入、并出实验,串入数码自定;改接线路用左移方式实现并...
  • 模块功能:接收串行数据,转为并行数据。 应用场景:在SPI,Uart等串行协议接收侧均有应用。 二. 模块框图与使用说明 有两种模式(通过参数SDATA_IS_CONTINUOUS进行选择): 1.数据连续模式,此时sdata_valid指示...
  • 简介,74LS674 是一枚16位并行输入串行输出位移寄存器芯片,有多种封装形式,常见的DIP封装型号为 SN74LS674N,因市面上这个芯片比较难买到,固文章也较少,实际上它跟常见的74HC系列的8bit位移寄存器使用方式是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,463
精华内容 22,185
关键字:

并行输入串行输出

友情链接: Downloads1.zip