HDLBits答案13-Sequential:Shift Registers
文章目录
- 1.4-bit shift register
- 2.Left/right rotator
- 3.Left/right arithmetic shift by 1 or 8
- 4. 5-bit LFSR
- 5. 3-bit LFSR
- 6. 32-bit LFSR
- 7. shift register
- 8.shift register
- 9. 3-input LUT
1.4-bit shift register
构建一个4位移位寄存器(右移位),具有异步复位、同步加载和启用。
areset:将移位寄存器重置为零。
load:加载数据移位寄存器[3:0]而不是移位。
ena:右移(q[3]变为0,q[0]移出并消失)。q:移位寄存器的内容。
module top_module(input clk,input areset, // async active-high reset to zeroinput load,input ena,input [3:0] data,output reg [3:0] q); always@(posedge clk or posedge areset)beginif(areset)q <= 4'b0;else if(load)q <= data;else if(ena)beginq <= {1'b0,q[3:1]};endend
endmodule
2.Left/right rotator
构建一个100位的左右旋转器,同步load,左右旋转需使能。旋转器从另一端输入移位的位元,不像移位器那样丢弃移位的位元而以零位移位。如果启用,旋转器就会旋转这些位,而不会修改或丢弃它们。
load:加载100位的移位寄存器数据
ena[1:0]:2’b01 右转1bit; 2’b10 左转1bit;
2’b00 和 2’b11情况不转
q:旋转器内容
module top_module(input clk,input load,input [1:0] ena,input [99:0] dataoutput reg [99:0] q);always@(posedge clk)beginif(load)q <= data;else if(ena == 2'b01)q <= {q[0],q[99:1]};else if(ena == 2'b10)q <= {q[98:0],q[99]};else if (ena == 2'b00 || ena == 2'b11)q <= q;end
endmodule
3.Left/right arithmetic shift by 1 or 8
建立一个64位算术移位寄存器,同步加载。移位器可以左右移位,并按数量选择1位或8位的移位。
load:加载数据
ena:决定是否移位
amount:决定移位方向与数量:2’b00:左移1位;2’b01:左移8位;2’b10:右移1位;2’b11:右移8位
q:寄存器内容(输出)
module top_module(input clk,input load,input ena,input [1:0] amount,input [63:0] data,output reg [63:0] q);always@(posedge clk)beginif(load)q <= data;else if(ena)begincase(amount)2'b00: q <= {q[62:0],1'b0};2'b01: q <= {q[55:0],8'b0};2'b10: q <= {q[63],q[63:1]};2'b11: q <= {{8{q[63]}},q[63:8]};endcaseendend
endmodule
4. 5-bit LFSR
构造线性移位寄存器,reset应当使LFSR归1
module top_module(input clk,input reset,output [4:0] q);always@(posedge clk)beginif(reset)q <= 5'b00001;else beginq[4] <= q[0] ^ 1'b0;q[3] <= q[4];q[2] <= q[3] ^ q[0];q[1] <= q[2];q[0] <= q[1];endend
endmodule
5. 3-bit LFSR
为这个序列电路编写Verilog代码。假设你要在DE1-SoC板上实现这个电路。将R输入连接到SW开关,将时钟连接到密钥[0],将L连接到密钥[1],将Q输出连接到红灯LEDR上
module top_module(input [2:0] SW,input [1:0] KEY,output [2:0] LEDR);wire clk;assign clk = KEY[0];always@(posedge clk)beginif(KEY[1])beginLEDR[0] <= SW[0];LEDR[1] <= SW[1];LEDR[2] <= SW[2];endelse beginLEDR[0] <= LEDR[2];LEDR[1] <= LEDR[0];LEDR[2] <= LEDR[1] ^ LEDR[2];endend
endmodule
6. 32-bit LFSR
构建一个32位的Galois LFSR,在32、22、2和1位处进行抽头。
module top_module(input clk,input reset,output [31:0] q);always@(posedge clk)beginif(reset)q <= 32'h1;else beginfor(int i=0;i<32;i++)beginif((i==21)||(i==1)||(i==0))beginq[i] <= q[i+1] ^ q[0];endelse if(i==31)beginq[i] <= q[0] ^1'b0;endelse beginq[i] <= q[i+1];endendendend
endmodule
7. shift register
module top_module(input clk,input resetn,input in,output out);reg q0,q1,q2;always@(posedge clk)beginif(~resetn)beginq0 <= 1'b0;q1 <= 1'b0;q2 <= 1'b0;out <= 1'b0;endelse beginq0 <= in;q1 <= q0;q2 <= q1;out <= q2;endend
endmodule
8.shift register
Connect the R inputs to the SW switches,
clk to KEY[0],
E to KEY[1],
L to KEY[2], and
w to KEY[3].
Connect the outputs to the red lights LEDR[3:0].
module top_module (input [3:0] SW,input [3:0] KEY,output [3:0] LEDR
); //
wire [3:0] w_input = {KEY[3],LEDR[3],LEDR[2],LEDR[1]};
generategenvar i;for(i=0;i<4;i++)begin:muxdffMUXDFF(.clk(KEY[0]), .w(w_input[i]), .R(SW[i]), .E(KEY[1]), .L(KEY[2]), .Q(LEDR[i]));end
endgenerateendmodulemodule MUXDFF (input clk,input w,R,E,L,output Q);wire temp1,temp2;assign temp1=E? w:Q;assign temp2=L? R:temp1;always@(posedge clk)beginQ <= temp2;endendmodule
9. 3-input LUT
在这个问题中,你将为一个8x1存储器设计一个电路,在这个电路中,写入到存储器是通过移位来完成的,而读取是“随机访问”,就像在一个典型的RAM中一样。然后您将使用该电路实现一个3输入逻辑功能。
首先,用8个d类型触发器创建一个8位移位寄存器。标记为Q[0]到Q[7]。移位寄存器输入称为S,输入Q[0] (MSB先移位)。使能输入enable控制是否移位,扩展电路使其有3个额外的输入A,B,C和一个输出Z。电路的行为应该如下:当ABC为000时,Z=Q[0],当ABC为001时,Z=Q[1],以此类推。你的电路应该只包含8位移位寄存器和多路复用器。(这个电路称为3输入查找表(LUT))。
module top_module (input clk,input enable,input S,input A, B, C,output Z ); reg [7:0] Q;always@(posedge clk)beginif(enable)beginQ <= {Q[6:0],S};endelse beginQ <= Q;endendassign Z = Q[{A,B,C}];endmodule
HDLBits答案13-Sequential:Shift Registers相关推荐
- HDLBits答案(13)_Verilog移位寄存器附加题
Verilog移位寄存器 HDLBits链接 前言 今天更新一节内容,该小节题目不多,共三道,但技巧性挺强. 题库 题目描述1:各单元的下一状态是此时当前单元相邻两位的异或. 在这个电路中,创建一个5 ...
- HDLBits 系列(7)——Sequential Logic(Counters、Shift Registers、More Circuits)
目录 3.2 Sequential Logic 3.2.2 Counters 1. Four-bit binary counter 2.Decade counter 3. Decade counte ...
- Verilog学习笔记HDLBits——Shift Registers
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Shift Registers 1.4-bit shift register 2.Left/right rotat ...
- Verilog HDLBits 第十三期:3.2.3 Shift Registers
目录 前言 3.2.3.1 4-bit Shift Register(shift4) Solution: 3.2.3.2 Left/right rotator(rotate100) Solution: ...
- HDLBits答案汇总
前言 该博客为本人做HDLBits习题时的心得记录总结,欢迎大家一起交流进步. HDLBits网站链接 Verilog Language Basics Vectors Modules:Hierarch ...
- 刷完这套题,我才发现Verilog原来如此简单----HDLBits答案系列---- Latches and Flip-Flops
写在前面 全部答案汇总:刷完这套题,我才发现Verilog原来如此简单----HDLBits答案汇总 今天更新Circuits章节中Sequential Logic的1个小节:Latches and ...
- 西南交大计算机绘图a答案,西南交大 计算机绘图A客观题答案(1-3次作业).doc
文档介绍: 脯消加救欢壮穿扭宠腥绅壹冶杨共愉如顿褥涟篮共涅复症翼流衙何钞陶藩焦敲争兰嫁懊青削舟叶溅会噪江探吗钞迅金虎钦年酝呜税定他位昨颅然洽赴凰延乾金申葡仙辩猎的冬空荷凯谰滋清肪桶钎婉烬滔耽瘩绚宇鞍布 ...
- MATLAB程序设计与应用刘卫国(第三版)课后实验答案——13
MATLAB程序设计与应用刘卫国(第三版)课后实验答案--13 一 二 三 四 五 六 一 h=figure('MenuBar','figure','color','r','WindowButtonD ...
- HDLBits答案(24)_由波形图描述电路
Build a circuit from a simulation waveform HDLBits链接 前言 今天更新HDLBits习题由波形图描述电路的部分,看图写代码. 题库 Combinati ...
- HDLBits答案(22)_基于有限状态机的计数器
基于有限状态机的计数器 HDLBits链接 前言 今天更新搭建更大的电路部分的习题,内容主要跟计数器和有限状态机有关. 题库 Counter with period 1000 构造一个0-999的计数 ...
最新文章
- wps 模拟分析 规划求解_入行十年,我是如何解决模流分析准确性问题的
- 写Java程序要体现面向对象
- computed 与methods , watched 的区别
- Vscode html代码快速填写
- 小程序入门系列之 tabBar
- Java 10中的本地类型推断,或者如果它像鸭子一样嘎嘎叫
- Java实现多线程售票
- c语言 整型转bool,C语言的布尔类型(_Bool)【转】
- spring单元测试无法注入bean_Spring容器启动@Value属性无法注入?
- JavaScript:继承详解
- 【爬虫】问题集-豆瓣电影
- python 微信小程序制作教程_微信小程序从零开始开发步骤(一)
- Java实现选择排序和冒泡排序
- iis7.5如何将应用程序池的启动模式(startMode)从onDemand(需要时)更改为AlwaysRunning(一直运行)?
- matlab实现拉依达准则,拉依达准则matalb程序
- 如何将深度学习与你正在做的事情相结合?
- 做事先做人 做人先立德
- ZOJ 1203 Swordfish(最小生成树 kruskal)
- 第五章 Java API(九)
- nginx解决微信头像canvas跨域问题