寄存器,移位寄存器的电路原理以及verilog代码实现

寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器:

逻辑功能分析:

1.异步端CR置0时,输出置0;

2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0~D3被同时并行置入。

3.在置数端为1,CP端为0时,保持不变。

2.移位寄存器:具有存放数码和使数码逐位右移或左移的电路称为移位寄存器。

移位寄存器按照不同的分类方法可以分为不同的类型。 如果按照移位寄存器的移位方向来进行分类, 可以分为左移移位寄存器、移位寄存器和双向移位寄存器等;如果按照工作方式来分类,可以分为串入/串出移位寄存器、串入/并出移位寄存器和并入/串出移位寄存器等。

以下为异步清零的4位并入串出移位寄存器(输入为并行数据,输出为串行数据)

module reg_bc(clk,clr,din,dout);
input clk,clr; // 输入时钟端,清零端(高电平有效)
input[3:0] din; // 数据输入端
output dout; // 数据输出端
reg[1:0] cnt;
reg[3:0] q;
reg dout;
always@(posedge clk)  // 时钟上升沿触发
begin
cnt<=cnt+1;  //cnt  自加 1
if(clr)  // 判断清零信号是否有效
begin
q<=4‘b0000; //q 置 置 0
end
else
begin
if(cnt>0) // 判断 cnt  是否大于 0
begin
q[3:1]<=q[2:0];  //q  中的值向左移 1  位
end
else if(cnt==2‘b00) // 判断 cnt  是否为 0
begin
q<=din; //把 把 din  的值赋予 q
end
dout<=q[3];  //把 把 q  的最高位输出
end
end

时间: 2025-01-01 15:34:10

寄存器,移位寄存器的电路原理以及verilog代码实现的相关文章

简易SDRAM控制器的verilog代码实现

SDRAM是每隔15us进行刷新一次,但是如果当SDRAM需要进行刷新时,而SDRAM正在写数据,这两个操作之间怎么进行协调呢? 需要保证写的数据不能丢失,所以,如果刷新的时间到了,先让写操作把正在写的4个数据(突发长度为4)写完,然后再去进行刷新操作: 而如果在执行读操作也遇到需要刷新的情况,也可以先让数据读完,再去执行刷新操作. 思路:SDRAM控制器包括初始化.读操作.写操作及自动刷新这些操作,给每一个操作写上一个模块独立开来,也便于我们每个模块的调试,显然这种思路是正确的: 虽然都是独立

Verilog代码自动缩进和对齐Perl脚本

实验室做FPGA开发时经常用到Verilog,代码规范成为一个问题,于是乎写了一个Perl脚本对代码进行规范化,主要是进行自动缩进和对齐. 代码原理很简单,主要是使用了正则表达式进行匹配和替换. 代码如下,初学Perl,请读者赐教: ##################################################### # 代码缩进对齐脚本 # 功能:对Verilog代码进行自动缩进和对齐处理, # 该版本目前还没有对case语句进行处理 # 更改:增加了对assign的缩进

多路选择器,加法器原理及verilog实现

1.数据选择器是指经过选择,把多个通道的数据传到唯一的公共数据通道上.实现数据选择功能的逻辑电路称为数据选择器,它的作用相当于多个输入的单刀多掷开关.本例程以四选一数据选择器(电平触发)为例. 四选一数据选择器书堆 4 个数据源进行选择, 使用量为地址 A1A0 产生 4 个地址信号,由 A1A0 等于"00" . "01" . "10" . "11"来选择输出,真值表如下: 对应的verilog代码为 module mux4

cordic算法原理及verilog实现

cordic算法原理及verilog实现 算法原理 由此我们可以推出,当(x0,y0)与(x1,y1)的夹角为Θ时,满足如下关系:  由此可得,当(x1,y1)长度为1时,,当根据坐标旋转法旋转Θ角度后,坐标点变为(1,0).因此,根据cordic算法求就是将初始线段旋转至(1,0)后,所得的(x,y)的值. 下面,我们将这些旋转步骤细化,看看每一步是如何工作的. 假设第n次旋转为顺时针旋转时,会得到如下结果:  此时提取会得到如下公式:  令每次旋转的角度Θ满足,则每次旋转最终的角度Θ满足:,

最短路径A*算法原理及java代码实现(看不懂是我的失败)

算法只要懂原理了,代码都是小问题,先看下面理论,尤其是红色标注的(要源码请留下邮箱,有测试用例,直接运行即可) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法. 公式表示为: f(n)=g(n)+h(n), 其中 f(n) 是从初始点经由节点n到目标点的估价函数, g(n) 是在状态空间中从初始节点到n节点的实际代价, h(n) 是从n到目标节点最佳路径的估计代价. 保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取: 估价值

Verilog代码可移植性设计(转自特权同学博客http://bbs.ednchina.com/BLOG_ARTICLE_1983188.HTM)

最近开始学习FPGA,之前项目中仅用过parameter,在CrazyBingo的<FPGA设计技巧与案例开发例程详解>中看到使用localparam,以及在366页中简单介绍了下‘define,parameter和localparam的区别.查找特权同学博客发现其曾经讲诉过.文中红色阴影处为文中错误. Verilog代码可移植性设计 1.       参数定义 localparam,实例代码如下: module tm1( clk,rst_n, pout ); input clk; input

H桥驱动电路原理

什么是H桥   由两个三极管,一个可以对正极导通实现上拉,另一个可以对负极导通实现下拉. H桥驱动电路原理

verilog代码风格——PN序列产生代码

在编写Verilog代码时注意以下点: 1 .同一个模块中不同变量的赋值放在不同的always块里(这样可以便于程序的调试),一个always块的代码        尽量不要超过十行. 2.同一个变量的赋值不能放在多个always块中,只能放在同一always块 2.复位信号一定要干净,尽量不要与其他的信号进行逻辑运算 3.利用时钟信号(clk)和复位信号(rst)做触发,尽量避免用中间变量的上升或者下降沿触发 示例代码如下(PN序列的产生): //-----------------------

omsp430ikmcu verilog代码

<open msp430应用笔记>中对应的verilog代码 mcu core顶层:omsp430.v //---------------------------------------------------------------------------- // // *File Name: openMSP430.v // // *Module Description: // openMSP430 Top level file // // *Author(s): // - Olivier