一、移位器(shifter)

作用:移位器和循环移位器用于移动位并完成2的幂的乘法或除法。

分类

  逻辑移位器——左移(LSL)或右移(LSR),以0填充空位。11001 LSR 2 =00110; 11001 LSL 2 = 00100;(veilog 操作符号>> or <<)

  算数移位器——算数左移(ASL)与逻辑左移相同,但算数右移(ASR)时会把原来数据的最高有效位填充在数据的最高有效位上,对于有符号数的乘法或除法有用。11001 ASR 2 = 11110; 11001 ASL 2 =00100;(verilog操作符号>>> or <<<)

  循环移位器——循环移动数字,从一端移走的位重新填充到另一端的空位。11001 ROR 2 = 01110;11001 ROL 2 = 00111。

二、移位寄存器(shift register)

输入:包括时钟clk,串行输入Sin,串行输出Sout和N位并行输出QN-1:0。

工作原理:在时钟的边沿,从Sin移入一个新的位,所有后续内容都向前移动,最后一位在Sout中。

作用:可以作为串行到并行(serial-to-parrallel)的转换器,输入由Sin提供,经N个周期后,前面的N位输入可以在Q中进行并行访问。

组成:如图5-34所示,N位的移位寄存器由N个触发器串联而成,有些移位寄存器还有触发器的复位信号。

相关电路:包含并行到串行转换器(parrallel-to-serial)的移位寄存器,并行加载N位,然后依次移出一位。

工作原理:相比于移位寄存器增加了并行输入DN-1:0和控制信号Load。当Load信号有效时,触发器从D中并行加载数据;否则正常移位。

通用移位寄存器

作用:后续补全

//通用移位寄存器
module Universal_Shift_Reg#(parameter word_size = )(
output reg[word_size-:] Data_out,
output MSB_out, LSB_out,
input [word_size-:] Data_in,
input MSB_in, LSB_in,
input s0, s1, clk, rst
);
assign MSB_out = Data_out[word_size-];
assign LSB_out = Data_out[]; always @(posedge clk)
begin
if(rst=='b1) Data_out <= 0;
else
case({s1, s0})
: Data_out <= Data_out; //maintain
: Data_out <= {MSB_in, Data_out[word_size-:]}; //MSB shift
: Data_out <= {Data_out[word_size-:], LSB_in}; //LSB shift
: Data_out <= Data_in; //parallel input
endcase end
endmodule

移位寄存器

作用

module shift_reg#(parameter word_size = )(
output reg_out,
input clk, rst,reg_in
);
reg [word_size-:] reg_data;
assign reg_out = reg_data[];
always @(posedge clk, negedge rst)
if(!rst) reg_data <= {word_size{'b0}}; //nonblock assignment
else reg_data <= {reg_in, reg_data[word_size-:]};
endmodule

桶形移位寄存器

作用

module barrel_reg #(parameter word_size = )(
output reg [word_size-:] data_out,
input [word_size-:] data_in,
input load, clk, rst
);
always @(posedge clk, posedge rst)
begin
if(rst) data_out <= {word_size{'b0}};
else if(load) data_out <= {data_in[word_size-:], data_in[word_size-]};
end
endmodule

算术移位寄存器

// 移一位和八位的算数寄存器
module top_module(
input clk,
input load,
input ena,
input [:] amount,
input [:] data,
output reg [:] q);
always @(posedge clk)
if(load)
q <= data;
else if(ena)
begin
case(amount)
'b00: q <= {q[62:0], 1'b0};
'b01: q <= {q[55:0], 8'b0};
'b10: q <= {q[63], q[63:1]};
'b11: q <= {{8{q[63]}}, q[63:8]};
endcase
end
else
q <= q; endmodule

扫描链(scan chain)

作用:通过扫描链技术,移位寄存器经常用于测试时序电路。

原因:由于时序电路中存在状态,测试相对困难。从一个已知的初始装填开始,可能需要许多周期的测试向量才能使电路进入期望状态。为解决这一问题,希望可以通过增加测试模式来实现直接观察和控制有限状态机的所有状态。。然而由于系统中触发器太多以至于无法为每个触发器分配一个管脚进行读写。但是,系统中所有触发器都连接在扫描链的以为寄存器中。

测试模式:允许自由地向所有触发器的内容读出或者加载所需要的值。在测试模式中,扫描链通过Sin和Sout串行地移出内容或写入新的内容。

移位寄存器及verilog代码的更多相关文章

  1. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

  2. HD,3G视频数据中行号的插入方法---Verilog代码实现

    HD,3G视频数据中行号的插入方法---Verilog代码实现 行号的生成: `timescale 1ns / 1ps //////////////////////////////////////// ...

  3. 串口接收端verilog代码分析

    串口接收端verilog代码分析 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

  4. 串口发送端verilog代码分析

    串口发送端verilog代码分析 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

  5. verilog 代码分析与仿真

    verilog 代码分析与仿真 注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值 边沿检测 module signal_test( input wire cmos_pcl ...

  6. 总线读写---verilog代码

    总线读写---verilog代码 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

  7. FIFO 的控制逻辑---verilog代码

    FIFO 的控制逻辑---verilog代码 //fifo的例化 wire fifo_full; wire fifo_empty; : ] fifo_dout; :]rd_data_count; :] ...

  8. 信号滤波模块verilog代码---UNLOCK,LOCK状态机方式

    信号滤波模块verilog代码 `timescale 1ns / 1ps /////////////////////////////////////////////////////////////// ...

  9. verilog代码 想法验证---与寄存器输出有关

    verilog代码 想法验证---与寄存器输出有关 1. module test_mind( input wire clk, input wire reset, input wire i, outpu ...

随机推荐

  1. PHP 是如何做垃圾回收的

    PHP 是如何做垃圾回收的 包含 php 5 与 php7 的变量实现和垃圾回收的对比 变量的实现 PHP 的变量是弱类型的,可以表示整数.浮点数.字符串等类型.PHP 的变量是使用结构体 zval ...

  2. JavaScript全栈教程

    这是小白的零基础JavaScript全栈教程. JavaScript是世界上最流行的脚本语言,因为你在电脑.手机.平板上浏览的所有的网页,以及无数基于HTML5的手机App,交互逻辑都是由JavaSc ...

  3. Mac录制或保存视频后如何放大?

    想要在录制和拍摄视频后在喜欢的场景(例如Mark)中放大视频吗?本文将向您展示如何放大视频并通过裁剪视频和“平移和缩放”效果来制作Ken Burns效果.Filmora9是一款功能强大的视频编辑器,具 ...

  4. buildroot教程

    什么是buildroot Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架. 0.下载buildroot Buildroot版本每2个月,2月,5月,8月和11月发布一次 ...

  5. Spring学习的第三天

    问题分析:在刚开始进行银行转账案例时,会获取四个连接,分别是查询接入.转出账户.更新转入.转出账户.这样会使转账不同步,如果某一处出现异常,前面的代码执行了,而后面的更新却没执行,导致一个账户加钱而另 ...

  6. mysql学习体系

    1. MySQL的安装和配置 -- 安装的步骤 -- 配置参数的设置 -- 全局变量量与会话变量量的定义及区别 -- 常⻅见参数有哪些,有何定义,影响范围是什什么 -- 如何查看参数的值 -- 配置⽂ ...

  7. mysql实践:sql优化

    ---恢复内容开始--- 设计表的时候 1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差) 2. 不要一张表放太多的数据     主表20~30个字段   ...

  8. MySQL数据库文件的移动和权限设置

    新型数据库层出不穷,MySQL一幅日薄西山的样子.其实还有很多人或者偏爱.或者使用以前遗留的系统,仍然生活在MySQL的世界. 我也是有很久不用了,这个很久超过十年. 不过前几天有个朋友让我帮忙为他们 ...

  9. WPF 中 Path 使用虚线

    效果如下: 上图由两个圆弧组成,代码如下: <!--红色的实线圆弧,旋转200度,顺时针,获取大圆弧--> <Path Data="M 50,200 A 100,100 2 ...

  10. 【转】开发一个这样的 APP 要多长时间?

    作者:蒋国刚 www.cnblogs.com/guogangj/p/4676836.html 呵呵. 这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着 ...