4.3 移位寄存器的实现和应用

这篇具有很好参考价值的文章主要介绍了4.3 移位寄存器的实现和应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 74x194的介绍

在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。
参考文档74LS194\74HC194的功能表
74LS194计数器及其应用
4.3 移位寄存器的实现和应用
一个D触发器可以实现一个一位的寄存器,两个触发器可以实现一个两位的寄存器,连接同一个时钟
移位寄存器如下图
4.3 移位寄存器的实现和应用
4.3 移位寄存器的实现和应用
4.3 移位寄存器的实现和应用
4.3 移位寄存器的实现和应用

4.3 移位寄存器的实现和应用

1 74x194的实现

1.1 设计文件

module p_74x194(clk,clr_l,rin,lin,s,d,q );
input clk,clr_l,rin,lin; 
input [1:0] s;
input [3:0] d;
output [3:0] q;
//reg [3:0] q=4'b0000;
reg [3:0] q=4'b0000;//注意对其赋初值,因为后面会用它
always @ (posedge clk or negedge clr_l)begin 
    if (clr_l==0) q<=0;
    else case (s)
        0:q<=q; //保持
        1:q<={rin,q[3:1]}; //右移
        2:q<={q[2:0],lin}; //左移
        3:q<=d; //装载
        default q<=4'bx ;//不可能发生
    endcase
/*    else case (s)
        0:q<=q; //保持
        1:begin q[3]<=rin;q[2]<=q[3];q[1]<=q[2];q[0]<=q[1];end//右移
        2:begin q[3]<=q[2];q[2]<=q[1];q[1]<=q[0];q[0]<=lin;end//左移
        3:q<=d; //装载
        default q<=4'bx ; 
    endcase*/
end
endmodule

1.2 仿真文件

1.2.1 仿真文件1

//教材P99页
module sim_p_74x194;
reg clk = 0;
reg clr_l = 1;
reg rin = 0;
reg lin = 1;
reg [1:0] s = 3;//装载3
reg [3:0] d = 4'b0101;
wire [3:0] q;
p_74x194 p_74x194_inst0(clk,clr_l,rin,lin,s,d,q);

    initial begin
    clk = 1'b0;
    #10
    clk = 1'b1;
    #10
    clk = 1'b0;
    s = 2'b10;//2左移
    #10
    clk = 1'b1;//第2个时钟上升沿,执行左移,左移后应q=4'b1011;
    #10
    clk = 1'b0;
    #10
    clk = 1'b1;//第3个时钟上升沿,执行左移,左移后应q=4'b0111;
    #10
    clk = 1'b0;
    #10
    clk = 1'b1;//第4个时钟上升沿,执行左移,左移后应q=4'b1111;
    #10
    clk = 1'b0;
    s = 2'b01;//右移
    end
    always #10 clk = ~clk;
endmodule

1.2.2 仿真文件2

//自己编写的测试文件
module sim_p_74x194( );

reg clk,clr_l,rin,lin; 
reg [1:0] s;
reg [3:0] d;
wire [3:0] q;
p_74x194 p_74x194_inst0(
    .clk(clk),
    .clr_l(clr_l),
    .rin(rin),
    .lin(lin),
    .s(s),
    .d(d),
    .q(q) 
    );
    always #10 clk = ~clk;
    initial begin
    clk = 1'b0;
    clr_l = 1'b1;
    rin = 1'b0;
    lin = 1'b1;
    s = 2'b11;
    d = 4'b0101;
    #30
    s = 2'b10;
    #60
    s = 2'b01;
    end
endmodule

1.3 仿真结果

1.3.1 仿真结果对q赋初值

reg [3:0] q=4’b0000;
4.3 移位寄存器的实现和应用
将结果转换成二进制,便于观察
4.3 移位寄存器的实现和应用

1.3.2 未对q赋初值

4.3 移位寄存器的实现和应用
将结果转换成二进制,便于观察
4.3 移位寄存器的实现和应用

2 使用74x194IP核实现11001序列发生器

2.1 分析

4.3 移位寄存器的实现和应用
4.3 移位寄存器的实现和应用4.3 移位寄存器的实现和应用
所有反馈逻辑是
4.3 移位寄存器的实现和应用
74x194的连接
4.3 移位寄存器的实现和应用

2.2 设计文件

1.先把IP核添加进来,点击Settings 在弹出的窗口中选 择点击左侧的IP图标点击库管理(Repository Manager)页框在库管理页框中点击“+”图标增加IP目录
2.选择设计好了的p_74x194工程目录,目录被加载进来,有一个IP
3.点击流程导航下工程项下的IP目录( IP Catalog),就可以看见刚刚添加的“p_74x194_0”IP核 。
4.3 移位寄存器的实现和应用
4.双击p_74x194_0 弹出IP窗口。可以看到该IP核的逻辑符号如图所示。这个窗口可以用来编辑IP实例组件的名称。点击ok实例化IP,例化成功后4.3 移位寄存器的实现和应用
4.3 移位寄存器的实现和应用

module seq_11001_3(
    input clk, 
    output led
    );
wire lin; 
reg[1:0] s=2'b10;//2左移
wire[3:0] q;
assign lin=~q[2]|~q[1];//反馈函数lin=q2'+q1'
assign led=lin;//可以将q[n]送到输出也是可实现11001序列
p_74x194_0 uut( //调用IP核 
    .clk(clk),
    .clr_l(1), //清零端无效
    .rin(0), //74x194 rin接地
    .lin(lin), //左移输入端等于q2'+q1'
    .s(s), //左移方式,s=2'b10
    .d(0), //数据输入端可以接任意值
    .q(q) //输出送q 
    //需要对p_74x194.v中的q赋初值,因为后面会用
    );
endmodule

2.3 仿真文件

与4.1 时钟同步状态机的设计中的seq_11001_1仿真文件一样

module sim_seq_11001_3(    );
    reg clk;
    wire led;
    seq_11001_3 seq_11001_3_inst0( 
    .clk(clk),
    .led(led)
    );
    initial begin
       clk = 0;
    end
    always #10 clk =~clk;
endmodule

2.4 约束文件

## clk
set_property PACKAGE_PIN D4 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk] 

##led
set_property PACKAGE_PIN P9 [get_ports {led}] 
set_property IOSTANDARD LVCMOS33 [get_ports {led}]

2.5 仿真结果

4.3 移位寄存器的实现和应用文章来源地址https://www.toymoban.com/news/detail-499301.html

到了这里,关于4.3 移位寄存器的实现和应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用FPGA实现桶形移位寄存器

    我给大家介绍的是逻辑/算术左移移位寄存器。实现的功能是根据输入信号shift将输入信号进行移位,高位移除,低位补0。我建立的工程是由3个独立的桶形移位寄存器组成的。 library ieee; use ieee.std_logic_1164.all; entity barrel is      port( inp : in std_logic_vector(7 downto 0);          

    2024年04月29日
    浏览(45)
  • Verilog基础之十一、移位寄存器实现

    目录 一、前言 二、工程设计 ​2.1 工程代码 2.2 综合结果 2.3 仿真结果     移位寄存器SRL在工程中属于使用频率较高个模块,可用于存储数据,实现串并转换;根据数据移动方向可分为左移寄存器,右移寄存器,左移是向数据高位移动,右移是向数据低位移动。  工程中包

    2024年02月11日
    浏览(44)
  • 用移位寄存器实现同步FIFO,带空满判断

            如图所示,同步FIFO带有push信号和pop信号,push代表往队列里面压入一个数据,pop代表往队列外面排出一个数据。         同步FIFO的空满判断用一个计数器来判断,收到push信号计数器加1,收到pop信号时计数器减1,考虑同时push和pop的情况计数器不变,当计数器为

    2024年02月14日
    浏览(54)
  • 实验四 用集成移位寄存器实现序列检测器

    一、实验要求 用移位寄存器和与非门设计一个 1101 序列检测器。电路连续不停地工作,对 串行输入的序列进行检测,当连续检测 4 个码元符合检测码 1101 时,检测器输出 为 1 ,指示灯亮,其他情况下输出为 0 ,指示灯灭。 二、实验设备 1 . Mini-FPGA 开发板( Cyclone IV 系列

    2024年02月03日
    浏览(42)
  • Verilog 实现伪随机数生成器(线性反馈移位寄存器)

    参考文献1 不简单的进行移位,而是在移位的基础上加上异或门,如题目所示,这就相当于每进行一次移位,寄存器中的值会发生改变,一直移动,一直改变,就形成了伪随机数。

    2024年02月09日
    浏览(56)
  • 【Verilog编程】线性反馈移位寄存器(LFSR)原理及Verilog代码实现

    移位寄存器 :指若干个寄存器排成一列,每个寄存器中存放1bit二进制数据(0或1),每个时钟周期向左或向右移动一个bit。下图所示为一个向右移动的移位寄存器。 反馈移位寄存器(Feedback Shift Register,FSR) :每个时钟脉冲,移位寄存器向右移动一位,则移位寄存器的左左侧就

    2024年02月15日
    浏览(52)
  • m基于FPGA的桶形移位寄存器verilog实现,包含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1、桶形移位寄存器的基本原理 2.2、桶形移位寄存器的数学模型 2.3、桶形移位寄存器的实现步骤 3.Verilog核心程序 4.完整算法代码文件 本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera 6.6d  Starter Edition 其

    2024年02月04日
    浏览(50)
  • verilog——移位寄存器

    在Verilog中,你可以使用移位寄存器来实现数据的移位操作。移位寄存器是一种常用的数字电路,用于将数据向左或向右移动一个或多个位置。这在数字信号处理、通信系统和其他应用中非常有用。以下是一个使用Verilog实现的简单移位寄存器的示例: module ShiftRegister (   inpu

    2024年02月05日
    浏览(44)
  • FPGA之移位寄存器

            SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D (DI1 LUT 引脚)和移出 Q31(MC31 LUT 引脚)线路将LUT级联,以形成更大的移位寄存器。因此,SLICEM 中的四个 LUT 被级联以

    2024年02月19日
    浏览(49)
  • LABVIEW的移位寄存器

    移位寄存器是数据的容器,可以包含任何数据类型。 添加移位寄存器后,在循环结构左右两侧的平行位置将各增加一个包含三角形的方框。左侧的方框代表上一次循环的运行结果,而右侧的代表本次循环要输入的结果。  最终得到5次循环后的结果。 接下来我们做一个通过移

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包