-
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
实际工程上笔者用到的并不是这样的,不过主要部分就是这些了。
-
8位并行输入串行输出的移位寄存器的Verilog描述
2020-04-24 21:13:081 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
endendmodule
2 RTL视图
3 功能仿真
-
Verilog简单功能实现--接口设计(并行输入串行输出)
2019-09-29 23:59:31这是一个将并行数据转换为串行输出的变换器,利用双向总线输出。这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integrated circuit)双向二线制串行总线协议为:只有总线处于“非忙”... -
driver_74HC165:74HC165并行输入串行输出移位寄存器的简单驱动器
2021-05-10 06:34:3474HC165驱动程序 74HC165并行输入串行输出移位寄存器的简单AVR驱动程序 -
宜宾学院VHDL课程作业16并行输入转16位同步串行输出
2013-01-22 11:52:30FPGA输入端口:CLR ,CLK , ALE , WR , DATA_P0 [7..0] , DATA_P2[7..0] ; FPGA输出端口:SCLK , SDATA , LD ; 16并转16位同步串出 -
ME2604:16位串行输入/并行输出恒流LED 显示面板驱动
2021-01-19 19:51:17它内建的CMOS位移寄存器与锁存功能,可以将串行的输入数据转换成平行输出数据格式。芯片的输入电压范围值为3.3伏特至5伏特,提供16个恒定电流源,可以在每个输出级提供 3-45mA 的恒定电流量以驱动 LED。 特点: ... -
数字IC笔试题——接口转换电路(串行输入/并行输出寄存器)
2021-07-23 10:53:23按照传统的串行输入/并行输出寄存器来解决,不考虑满时钟域到快时钟域的同步打拍问题。 源代码: module chuan_bing( input clka,clkb,//clka串行输入时钟,clkb并行输出时钟 input da,//串行输入数据 input ... -
51单片机串行口扩展并行口输入输出Proteus仿真
2015-06-30 15:53:3251单片机串行口扩展并行口输入输出Proteus仿真 -
51单片机之IO口扩展——74HC165芯片并行转串行实验
2019-05-18 14:59:14我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来... -
全串行、并行FIR滤波器
2021-03-28 16:15:28全串行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的用法及其实际应用
2020-02-16 18:03:44在一些电路中,我们需要对很多器件进行控制,但是...在这种情况下,采用串行转并行芯片是一个很好的选择,通过串行的数据输入实现对并行器件的控制。 74HC595是一个典型的串行转并行芯片,它的实物如下图所示 ... -
8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 英文资料-综合文档
2021-05-12 12:33:598 位串行输入输出或者并行输出移位寄存器 74HC595芯片 英文资料 -
8 位串行输入输出或者并行输出移位寄存器 74HC595芯片 中文资料.rar-综合文档
2021-05-12 12:33:248 位串行输入输出或者并行输出移位寄存器 74HC595芯片 中文资料.rar -
显示/光电技术中的ME2604:16位串行输入/并行输出恒流LED 显示面板驱动
2020-11-03 19:16:00它内建的CMOS位移寄存器与锁存功能,可以将串行的输入数据转换成平行输出数据格式。芯片的输入电压范围值为3.3伏特至5伏特,提供16个恒定电流源,可以在每个输出级提供 3-45mA 的恒定电流量以驱动 LED。 特点: ... -
学习FPGA并行数据转串行数据——移位
2021-08-13 10:30:461、8位并行数据输入转串行数据输出,采用移位方式,代码如下: module shift ( clk,rst_n, din,dout ); parameter Num=8; output dout; //串行数据输出 input clk; //控制时钟 input rst_n; //复位信号,... -
【51单片机】串行口连接74LS164进行串行/并行转换,输出到一个七段数码管。数码管循环显示0-9。采用串行...
2022-04-21 10:04:52实验内容: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:114、并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、... -
移位寄存器串进并出
2021-06-17 21:20:03第三步:目的:并行输出数据。即数据并出 方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据 送入到输出锁存器。 说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是 -
8位串行输入串行输出移位寄存器的Verilog设计
2020-04-24 16:51:011 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:361、串行转并行 引脚图 逻辑框图 2、功能注释 芯片主要分为移位寄存器和锁存寄存器两大部分。移位寄存器存储串行输入的数据,锁存寄存器锁存移位寄存器内的数据。 1)SHIFT CLOCK:移位时钟输入引脚,上升沿将... -
移位寄存器
2020-12-29 09:08:06(5) 保持:寄存器予置任意4位二进制数码abcd,令=1,S1=S0=0,加CP脉冲,...1.实现数据的串、并行转换(1)串行输入、并行输出按图8-3-3-3接线,进行右移串入、并出实验,串入数码自定;改接线路用左移方式实现并... -
Verilog功能模块——串行数据转并行数据
2021-04-24 16:13:34模块功能:接收串行数据,转为并行数据。 应用场景:在SPI,Uart等串行协议接收侧均有应用。 二. 模块框图与使用说明 有两种模式(通过参数SDATA_IS_CONTINUOUS进行选择): 1.数据连续模式,此时sdata_valid指示... -
ARDUINO操作74LS674(16bit并进串出位移寄存器)
2018-12-27 16:24:51简介,74LS674 是一枚16位并行输入串行输出位移寄存器芯片,有多种封装形式,常见的DIP封装型号为 SN74LS674N,因市面上这个芯片比较难买到,固文章也较少,实际上它跟常见的74HC系列的8bit位移寄存器使用方式是...