精华内容
下载资源
问答
  • 寄存器串行和并行输入
    万次阅读
    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
    
    
    
    更多相关内容
  • 串行/并行转换的具体过程如下:转换前,RC端加低电平,使1、2两片寄存器的内容清0,此时S1S0=11,寄存器执行并行输入工作方式。当第一个CP脉冲到来后,寄存器的输出状态Q0~Q7为01111111,与此同时S1S0变为01,转换...

    串行/并行转换的具体过程如下:

    转换前,RC端加低电平,使1、2两片寄存器的内容清0,此时S1S0=11,寄存器执行并行输入工作方式。当第一个CP脉冲到来后,寄存器的输出状态Q0~Q7为01111111,与此同时S1S0变为01,转换电路变为执行串入右移工作方式,串行输入数据由1片的SR端加入。随着CP脉冲的依次加入,输出状态的变化可列成表7-3所示。

    由表7-3可见,右移操作七次之后,Q7变为0,S1S0又变为11,说明串行输入结束。这时,串行输入的数码已经转换成了并行输出了。

    当再来一个CP脉冲时,电路又重新执行一次并行输入,为第二组串行数码转换作好了准备。

    ②并行/串行转换器

    并行/串行转换器是指并行输入的数码经转换电路之后,换成串行输出。

    图7-4是用两片CC40194(74LS194)组成的七位并行/串行转换电路,它比图7-3多了两只与非门G1和G2,电路工作方式同样为右移。

    寄存器清“0”后,加一个转换起动信号(负脉冲或低电平)。此时,由于方式控制S1S0为11,转换电路执行并行输入操作。当第一个CP脉冲到来后,Q0Q1Q2Q3Q4Q5Q6Q7的状态为0D1D2D3D4D5D6D7,并行输入数码存入寄存器。从而使得G1输出为1,G2输出为0,结果,S1S2变为01,转换电路随着CP脉冲的加入,开始执行右移串行输出,随着CP脉冲的依次加入,输出状态依次右移,待右移操作七次后,Q0~Q6的状态都为高电平1,与非门G1输出为低电平,G2门输出为高电平,S1S2又变为11,表示并/串行转换结束,且为第二次并行输入创造了条件。转换过程如表7-4所示。

    中规模集成移位寄存器,其位数往往以4位居多,当需要的位数多于4位时,可把几片移位寄存器用级连的方法来扩展位数。

    展开全文
  • 微机与I/O设备的接口按照数据传送方式的不同,可分为:并行接口和串行接口两种。 6.1 串行通信和串行接口 6.1.1 串行通信涉及的几个问题 串行通信:将数据分解成二进制位,用一条数据线,一位一位的顺序传送...

    6.1 串行通信和串行接口

    6.2 可编程串行通信接口8251A

    6.3 并行通信和并行接口

    6.4 可编程并行通信接口8255A

    教学重点:

    • 串并行接口的用途
    • 8251A的功能结构与工作原理、初始化流程
    • 8255A的控制字
    • 8255A的工作方式

    微机与I/O设备的接口按照数据传送方式的不同,可分为:并行接口串行接口两种。

    6.1 串行通信和串行接口

    6.1.1 串行通信涉及的几个问题

    串行通信:将数据分解成二进制位,用一条数据线,一位一位的顺序传送的方式。在传输过程中,每一位数据占据一个固定的时间长度

    特点:

    • 数据线少、抗干扰性强

    适用范围:

    • 长距离、中低速通讯

    串行通信有多种方式:

    按照数据传输时发送过程和接收过程的关系来划分:

    • 全双工方式
    • 半双工方式
    • 单工方式

    全双工:双根传输线,数据的发送和接收采用不同的通道,能够同时发送和接收。(电话)

    半双工:单根传输线,数据的发送和接收采用同一的通道,不能同时发送和接收。(BB机)

    单工:单根传输线只能在一个方向传输数据,只能用作发送或只用作接收。

    按照时钟对通信过程的定时方式来划分:

    • 同步通信
    • 异步通信

    同步通信:收发双方采用同一个时钟信号来定时。

    多个字符组成一个数据块(信息帧),在每个信息帧之前要附加一个或两个同步字符,在信息帧之后附加校验字符同步通信一个信息帧含有多个或上千字符

    异步通信:收发双方不用统一的时钟来定时。

    • 通过起始位停止位来识别信息帧。
    • 一个信息帧只含1个字符。

    每个字符一位一位地传输,传输一个字符时,以起始位开始,然后传输字符本身各位,接着传输校验位,最后以停止位结束该字符的传输。

    一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为异步通信的一个信息帧(Frame),只含一个字符。帧与帧之间可有任意个空闲位

    异步通信数据格式总结:

    • 无信息传输(或间隔)时,输出必须为 “1” 状态(标识态)
    • 1到0的跳变作为字符的开始——起始位
    • 起始位后5~8位为数据位,低位在前,高位在后
    • 数据位后位奇偶校验位,可有可无。
    • 最后有1、1.5或2位停止位,均为 “1”

    串行通信的传输率

    在串行通信中,用波特率(bps)来描述数据的传输速率。即每秒传送二进制的位数。

     在同样的传输率下,同步传输时实际字符传输率要比异步传输时高。

    6.1.2 串行接口

    串行接口中4个主要的寄存器

    • 控制寄存器
    • 状态寄存器
    • 数据输入寄存器
    • 输出输出寄存器

    串并行数据转化

    输入时(输入CPU),串行输入,并行输出。移位寄存器将接收的1个字符移位得到并行数据,并将之送到数据输入寄存器。

    输出时,数据寄存器将接收的并行数据传输给移位寄存器,然后将其转换成串行数据。

    6.2 可编程串行通信接口 8251A

    8251A的发送与接收

    异步接收:将RxD线上的低电平作为起始位,并开始计数。当计数到半位的传输时间,再次检测RxD,若仍为低电平,则确认收到有效起始位。(两次确认)

    异步发送:当控制寄存器中发送允许位TXEN位为1且CTS#有效,则开始发送。

    同步接收方式:8251A先搜索同步字符,将RXD线上的数据送入移位寄存器,然后将得到的字符与同步字符寄存器内容相比较。若相等,则SYNDET输出高电平表示同步字符已经找到。

    同步发送方式:当控制寄存器中TXEN位为1且CTS#有效,则开始发送。先传送同步字符,后传送数据块

    8251A的寄存器

    1、方式寄存器

    模式字是在对8251A进行初始化时,用程序命令写入且只需写入一次。

    2、控制寄存器

    控制字是在模式字之后写入,用来控制8251A的工作,使其处于规定的状态以及准备发送或接收数据。

    控制字和模式字共用一个奇地址端口,8251A是根据写入的先后顺序来加以区分的,先写入的是模式字,后写入的是控制字。

     3、状态寄存器

    状态寄存器用来存放8251A的状态字,用来反映8251A的状态信息,可供CPU读取查询。

    8251A的初始化

    8251A使用前必须进行初始化,以确定工作方式、传送速率、字符格式以及停止位长度等;改变8251A的工作方式时必须再次进行初始化编程;

    8251A初始化的约定:

    • 复位后,第一次给奇地址端口写入的值作为方式字(模式字)送入方式寄存器。
    • 如规定为同步模式,那么,接下来往奇地址端口写入的是同步字符。如果是双同步,则先后两次写入同步字符。
    • 接下来,只要不是复位命令,CPU给奇地址写入的是控制字,给偶地址端口写入的是要发送的数据。

    8251A编程举例

     解:

    6.3 并行通信和并行接口

    并行通信:把一个字符的各位用几条线同时进行传输的一种通信方式。例如一组8位数据或16位数据的同时传入或传出。

    优点:传输速度快,信息率高。

    缺点:电缆耗损高。

    适用场合:适用于数据传输率较高、传输距离较短的场合。

    并行接口:实现并行通信的接口称为并行接口。

    按照信息传送方向,分为:输入接口、输出接口和输入/输出接口

    按照可编程性分类:不可编程并行接口和可编程并行接口。

    • 不可编程的并行接口:接口的工作方式及功能由硬件连接来设定,不能用软件编程的方法改变,接口的工作方式固定不变。
    • 可编程的并行接口:一般由可编程通用接口芯片组成,可由编程人员通过编程来进行设定芯片性能。

    输出数据给外设:

    1. 当接口状态寄存器“输出准备好”位为1时,CPU将数据送到接口的输出缓冲器。
    2. 接口清除“输出准备好”位,将数据送往外设,向外设发送“数据输出准备好”信号以启动外设 外设接收数据,向接口发送“数据输出响应”信号。
    3. 接口将状态寄存器中 “输出准备好” 位重新置1。

    6.4 可编程并行通信接口8255A

    6.4.1 8255A的内部接口和外部信号

    1、数据端口A、B、C

    8255A的三个数据端口都是8位的,而各有特点。

    端口A:是一个独立的8位数据I/O口,它的内部有对数据输入/输出的锁存功能。

    端口B:是一个独立的8位数据I/O口,仅对输出的数据锁存

    端口C:可以看作是一个 独立的8位I/O口;也 可以看作是两个独立 的4位I/O口。还可以 用作A口和B口的控制 信号。仅对输出数据进行锁存。

    2、A组控制和B组控制

    这两组控制部件 有两个功能:

    1. 接收芯片内部总线上 的控制字;
    2. 接收来自读/写控制逻辑 电路的读/写命令, 据此而决定两组端口 的工作方式和读/写 操作。

    3、读/写控制逻辑电路

    4、数据总线缓冲器

    6.4.2 8255A的控制字

    8255A用指令在控制端口中设置控制字来决定其工作。

    控制字分为两类:

    • 方式选择控制字
    • C端口按位置1 置0控制字

    8255A有三种基本工作方式:方式0、方式1、方式2。

    • 端口A可工作在任何一种方式
    • 端口B只能工作在方式0或方式1
    • 端口C配合端口A和B的工作

     

    展开全文
  • 它内建的CMOS位移寄存器与锁存功能,可以将串行输入数据转换成平行输出数据格式。芯片的输入电压范围值为3.3伏特至5伏特,提供16个恒定电流源,可以在每个输出级提供 3-45mA 的恒定电流量以驱动 LED。  特点: ...
  • LFSR主要用于通信加扰解...线性反馈移位寄存器(LFSR)是内测试电路中最基本的标准模块结构,既用作伪随机测试码产生器,也作为压缩测试结果数据的特征分析器。 一个n阶的LFSR由n个触发器若干个异或门组成。在实际...

    文章部分转自https://blog.csdn.net/yongan1006/article/details/8716456

    LFSR主要用于通信加扰解扰;CRC主要用于通信传输数据校验。

    一 、LFSR

    线性反馈移位寄存器(LFSR)是内测试电路中最基本的标准模块结构,既用作伪随机测试码产生器,也作为压缩测试结果数据的特征分析器。

    一个n阶的LFSR由n个触发器和若干个异或门组成。在实际应用当中,主要用到两种类型的LFSR,即异或门外接线性反馈移位寄存器(IE型LFSR,图1)和异或门内接线性反馈移位寄存器(EE型LFSR,图2)。其中g0 g1g2 gn为’0’或’1’,Q1 Q2Q3 Qn为LFSR的输出,M(x)是输入的码字多项式,如M(x)=x4+ x1+1,表示输入端的输入顺序为11001,同样,LFSR的结构也可以表示为多项式G(x),称为生成多项式:

    G(x)=gn*xn+ …+g1*x1+g0;

     

    LFSR的工作原理以及LFSR在CRC上的应用


                                                                                      图1 IE型LFSR

    LFSR的工作原理以及LFSR在CRC上的应用

                                                                                      图2 EE型LFSR

    需要注意的是一位寄存器的初始值不能为全0;

    二 、CRC

    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)可以使整个编码被除余数为0。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2的R次方除以生成多项式G(x)得到的余数就是校验码。

    通过CRC的生成原理知道CRC的检验码生成是通过除法得到,由此联想到可以通过LFSR来产生校验码。

    假设原信息码子多项式为

    LFSR的工作原理以及LFSR在CRC上的应用

     

    生成多项式为

      

    LFSR的工作原理以及LFSR在CRC上的应用

     

    那么CRC的码字为LFSR的工作原理以及LFSR在CRC上的应用 ,使用用LFSR电路来进行实现,将M(x)向左移r位在电路中的意义即为输入完信息码后再输入r个0,所以在电路上的表现就如图5所示。

    LFSR的工作原理以及LFSR在CRC上的应用

     

                                                                             图5 使用LFSR来产生CRE校验码

    需要注意的是移位寄存器的初始值不同结果是不一致的。

    三、并行实现CRC校验

    上面介绍的CRC校验主要是用于单比特流的校验,但是很多实际应用中位宽很大的一组数据需要做CRC校验的情况时以上一位寄存器是不能实现的。例如M位宽的并行数据,我们可以根据移位前的N位寄存器值和M位并行数据的位宽数据做逻辑运算计算出(N+1)阶的CRC值。

    代码生成工具网站:https://www.easics.be/webtools/crctool

    此网站可以生成Verilog和VHDL的逻辑代码,如果是时序电路把逻辑电路可以修改成时序电路。

    生成代码的“Data”是每次输入位宽的数据;“CRC”是初始CRC值和上次生成的CRC。

    例如:生成多项式是x^16+x^15+x^2+1,初始值为全1;

    生成代码为

    
    // Copyright (C) 1999-2008 Easics NV.
    // This source file may be used and distributed without restriction
    // provided that this copyright statement is not removed from the file
    // and that any derivative work contains the original copyright notice
    // and the associated disclaimer.
    //
    // THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
    // OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
    // WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    //
    // Purpose : synthesizable CRC function
    //   * polynomial: x^16 + x^15 + x^2 + 1
    //   * data width: 16
    //
    // Info : tools@easics.be
    //        http://www.easics.com
    
    module CRC16_D16;
    
      // polynomial: x^16 + x^15 + x^2 + 1
      // data width: 16
      // convention: the first serial bit is D[15]
      function [15:0] nextCRC16_D16;
    
        input [15:0] Data;
        input [15:0] crc;
        reg [15:0] d;
        reg [15:0] c;
        reg [15:0] newcrc;
      begin
        d = Data;
        c = crc;
    
        newcrc[0] = d[15] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[9] ^ c[10] ^ c[11] ^ c[12] ^ c[13] ^ c[15];
        newcrc[1] = d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[9] ^ c[10] ^ c[11] ^ c[12] ^ c[13] ^ c[14];
        newcrc[2] = d[14] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[14];
        newcrc[3] = d[15] ^ d[2] ^ d[1] ^ c[1] ^ c[2] ^ c[15];
        newcrc[4] = d[3] ^ d[2] ^ c[2] ^ c[3];
        newcrc[5] = d[4] ^ d[3] ^ c[3] ^ c[4];
        newcrc[6] = d[5] ^ d[4] ^ c[4] ^ c[5];
        newcrc[7] = d[6] ^ d[5] ^ c[5] ^ c[6];
        newcrc[8] = d[7] ^ d[6] ^ c[6] ^ c[7];
        newcrc[9] = d[8] ^ d[7] ^ c[7] ^ c[8];
        newcrc[10] = d[9] ^ d[8] ^ c[8] ^ c[9];
        newcrc[11] = d[10] ^ d[9] ^ c[9] ^ c[10];
        newcrc[12] = d[11] ^ d[10] ^ c[10] ^ c[11];
        newcrc[13] = d[12] ^ d[11] ^ c[11] ^ c[12];
        newcrc[14] = d[13] ^ d[12] ^ c[12] ^ c[13];
        newcrc[15] = d[15] ^ d[14] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[9] ^ c[10] ^ c[11] ^ c[12] ^ c[14] ^ c[15];
        nextCRC16_D16 = newcrc;
      end
      endfunction
    endmodule
    

    仅供参考的时序电路为:

    module CRC_16(
    	input clk,
    	input reset,
    	input sync,
        input [15:0] Data,
    	output [15:0] newcrc
        );
    
    	
    	
        reg [15:0] d;
       // wire [15:0] newcrc;
    	reg [15:0] c;
    	reg r_sync;
    	always@(posedge clk)
    		r_sync<=sync;
    	
    	always@(posedge clk or posedge reset) begin
    		if(reset) begin
    			d<=16'd0;
    			c<=16'd0;
    		end
    		else if(sync) begin
    			d<=16'd0;
    			c<=16'd0;
    		end
    		else if(r_sync) begin
    			d <= Data;
    			c <= 16'hFFFF;
    		end
    		else begin
    			d <= Data;
    			c <= newcrc;
    		end
    
    	end
    
    	assign newcrc[0] = d[15] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[9] ^ c[10] ^ c[11] ^ c[12] ^ c[13] ^ c[15];
    	assign newcrc[1] = d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[9] ^ c[10] ^ c[11] ^ c[12] ^ c[13] ^ c[14];
    	assign newcrc[2] = d[14] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[14];
    	assign newcrc[3] = d[15] ^ d[2] ^ d[1] ^ c[1] ^ c[2] ^ c[15];
    	assign newcrc[4] = d[3] ^ d[2] ^ c[2] ^ c[3];
    	assign newcrc[5] = d[4] ^ d[3] ^ c[3] ^ c[4];
    	assign newcrc[6] = d[5] ^ d[4] ^ c[4] ^ c[5];
    	assign newcrc[7] = d[6] ^ d[5] ^ c[5] ^ c[6];
    	assign newcrc[8] = d[7] ^ d[6] ^ c[6] ^ c[7];
    	assign newcrc[9] = d[8] ^ d[7] ^ c[7] ^ c[8];
    	assign newcrc[10] = d[9] ^ d[8] ^ c[8] ^ c[9];
    	assign newcrc[11] = d[10] ^ d[9] ^ c[9] ^ c[10];
    	assign newcrc[12] = d[11] ^ d[10] ^ c[10] ^ c[11];
    	assign newcrc[13] = d[12] ^ d[11] ^ c[11] ^ c[12];
    	assign newcrc[14] = d[13] ^ d[12] ^ c[12] ^ c[13];
    	assign newcrc[15] = d[15] ^ d[14] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[9] ^ c[10] ^ c[11] ^ c[12] ^ c[14] ^ c[15];
    
    
    endmodule
    

    testbench

    module tb_crc_16;
    
    	// Inputs
    	reg clk;
    	reg reset;
    	reg sync;
    	reg [15:0] Data;
    
    	// Outputs
    	wire [15:0] c;
    
    	// Instantiate the Unit Under Test (UUT)
    	CRC_16 uut (
    		.clk(clk), 
    		.reset(reset), 
    		.sync(sync), 
    		.Data(Data), 
    		.newcrc(c)
    	);
    
    	initial begin
    		clk=0;
    		forever #5 clk=~clk;
    	end
    	initial begin
    		reset=1;
    		#30 reset=0;
    	end
    	initial begin
    		sync=1;
    		#50 sync=0;
    	end
    	initial begin
    		#50 Data<=16'h3132;
    		#10 Data<=16'h3334;
    
    	end
          
    endmodule
    
    

    在CRC在线计算器网站http://www.ip33.com/crc.html   设置如下,验证结果:

    展开全文
  • 74HC595 - 串行并行

    2020-07-14 17:44:36
    移位寄存器存储串行输入的数据,锁存寄存器锁存移位寄存器内的数据。 1)SHIFT CLOCK:移位时钟输入引脚,上升沿将数据串行输入; 2)SERIAL DATA INPUT:串行数据输入引脚; 3)RESET:清空移位寄存器中数据,低电平有效...
  •  在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的触发器为基础的器件,数据以并行串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。...
  • 按照传统的串行输入/并行输出寄存器来解决,不考虑满时钟域到快时钟域的同步打拍问题。 源代码: module chuan_bing( input clka,clkb,//clka串行输入时钟,clkb并行输出时钟 input da,//串行输入数据 input ...
  • 移位寄存器串进并出

    2021-06-17 21:20:03
    第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。 方法:送位数据到_595。 第二步:目的:将位数据逐位移入74HC595,即数据串入 方法:SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位...
  • 8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 英文资料
  • 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...
  • 74HC165驱动程序 74HC165并行输入串行输出移位寄存器的简单AVR驱动程序
  • 8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 中文资料.rar
  • Verilog 并行输入 串行输出+数据更新

    千次阅读 2020-10-31 09:30:25
    别的并转串不同的是这次是并转串plus 笔者看网上大多数有关Verilog并转串程序实践性较差,要么输出延时较大,要么不支持输入数据更新输出,还有的就是从低位到高位输出(个人觉得不大方便)。 那么废话少说,...
  • 并行存取的移位寄存器的设计

    千次阅读 2020-12-10 00:08:14
    4.能够右移串行输入并行输出(串并转换); 5.能够并行输入、右移串行输出(并串转换)。 相关知识 寄存器(Register)的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位...
  • 在SL低电平且SCK上升沿的时候,将串行数据SDATA存入寄存器里(要求存入D0之后的数据,A0、A1、A2及TEST BIT不存入寄存器)。并且,SL由高电平转为低电平后,数据重新从寄存器的第一位开始存。
  • 串行并行FIR滤波器

    千次阅读 2021-03-28 16:15:28
    串行FIR实现 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Create Date: 2021/03/13 17:28:28 // Design Name: FIR滤波器全串行结构实现仿真 /...
  • 它内建的CMOS位移寄存器与锁存功能,可以将串行输入数据转换成平行输出数据格式。芯片的输入电压范围值为3.3伏特至5伏特,提供16个恒定电流源,可以在每个输出级提供 3-45mA 的恒定电流量以驱动 LED。  特点: ...
  • 串行移位寄存器原理与结构分析

    千次阅读 2021-05-04 15:15:32
    1 串转并功能,通过移位寄存器和输出锁存器实现 2 FPGA需要通过74HC595这个芯片把16位的数据(sel+seg)变为并行端口用来驱动数码管 3 3.3V供电情况下,取SHCP时钟频率位12.5MHz(50-20ns,25-40ns,12.5-80ns),让...
  • 并行串行 串行并行输出模块

    千次阅读 2018-12-28 17:50:02
    并行串行 串行并行输出模块 夏宇闻Verilog 第15章学习...两个模块ptosdaout16hi,将ptosda并转串模块的串行输出给out16hi串转并模块,输出对应的高位电平 代码如下 //************************并行数据转一种...
  • 说明:串行数据由 RXD 发送给串 并转换芯片 74164,TXD 则用于输出移位时钟脉冲,74164 将串行输入的 1 字节转换为并行数据,并将转换的数据通过 8 只 LED 显示出来。本例串口工作模式 0,即移位寄存器 I/O 模式。
  • 题: 试用D触发器必要的门电路(或最小数量的中规模集成电路芯片)设计两位串行输入并行输出双向移位寄存器. 寄存器有X、K两个输入端, K控制移位方向, X输入数据. K=0时, 寄存器数据从高位移向低位, X往寄存器高位...
  • 文章开始声明一点,从本章开始很多电路图都是博主从百度百科搜到的,因为实在是画得不好,如果有侵权请私信我,我在...4)运算器也包含许多通用的逻辑单元,暂存操作数,累加器(ACC),商乘寄存器(MQ),操作数寄存器
  • 移位寄存器

    2020-12-09 01:57:52
    移位寄存器是暂时存放数据的部件,同时它还具有移位功能。 一、特点分类 从逻辑结构上看,移位寄存器...移位寄存器的数据输入方式有串行输入和并行输入之分。串行输入就是在时钟脉冲作用下,把要输入的数据从一个
  • 本关任务:在Logisim中,构建由4个D触发器构成的4位循环右移移位寄存器,要求上升沿触发,具有异步复位功能以及并行数据同步加载功能。 相关知识???? 寄存器(Register)的功能是存储二进制代码,它是由具有存储功能...
  • 画出用74ls194a组成16位双向移位寄存器 从逻辑结构上看,移位寄存器有以下两个显著特征:(1)移位寄存器是由相同的寄存单元所组成。一般说来,寄存单元的个数就是移位寄存器的位数。为了完成不同的移位功能,每个寄存...
  • 1、8位并行数据输入串行数据输出,采用移位方式,代码如下: module shift ( clk,rst_n, din,dout ); parameter Num=8; output dout; //串行数据输出 input clk; //控制时钟 input rst_n; //复位信号,...
  • verilog数字系统实验设计实现带缓冲器的串入并出移位寄存器

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,835
精华内容 11,134
热门标签
关键字:

寄存器串行和并行输入