目录

前言

3.2.3.1 4-bit Shift Register(shift4)

Solution:

3.2.3.2 Left/right rotator(rotate100)

Solution:

3.2.3.3 Left/right arithmetic shift by 1 or 8(shift18)

Solution:

3.2.3.4 5-bit LFSR(Lfsr5)

Solution:

3.2.3.5 3-bit LFSR(Mt2015 lfsr)

Solution:

3.2.3.6 32-bit LFSR(Lfsr32)

Solution:

3.2.3.7 shift register(Exams/m2014 q4k)

Solution:

3.2.3.8 shift register(Exams/m2014 q4b)

Solution:

3.2.3.9 3-input LUT(Exams/ece241 2013 q12)

Solution:


前言

HDLbits网站如下

Problem sets - HDLBits (01xz.net)

从本期开始我们继续HDLbits第三章Circuits的学习,本期的内容是3.2.3 Shift Registers


3.2.3.1 4-bit Shift Register(shift4)

构建一个四位移位寄存器(右移),具有异步复位、同步置位和使能功能。

  • areset:将移位寄存器复位为0
  • load:用data[3:0]加载移位寄存器而不是进行移位
  • ena:右移(q[3]变为0,q[0]移出并消失)
  • q:移位寄存器的内容

如果load和ena同时有效(为1),则load具有更高优先级

Solution:

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,posedge areset)beginif(areset)q<=4'd0;else if(load)q<=data;else if(ena)q<={1'b0,q[3:1]};                end
endmodule

分清优先级,areset>load>ena


3.2.3.2 Left/right rotator(rotate100)

构建一个100位左移/右移移位寄存器,带有同步置位和left/right 使能功能。本题中,移位寄存器不会舍弃也不会补0,而是循环移位。

  • load:用data[99:0]加载移位寄存器而不是进行移位
  • ena[1:0]:选择是否循环以及循环的方向 (2‘b01右移1bit,2’b10左移1bit,2‘b00和2’b11不进行循环)
  • q:移位寄存器的内容

如果load和ena同时有效(为1),则load具有更高优先级

Solution:

module top_module(input clk,input load,input [1:0] ena,input [99:0] data,output reg [99:0] q); always@(posedge clk)beginif(load)q<=data;else begincase(ena)2'b01:q<={q[0],q[99:1]};2'b10:q<={q[98:0],q[99]};default:q<=q;endcaseend            end
endmodule

3.2.3.3 Left/right arithmetic shift by 1 or 8(shift18)

构建一个64位算术移位寄存器,带有同步置位功能。移位器可以向左和向右移动1位或者8位,由amount选择。

算术右移符号位保持不变,即将有符号数除以2的幂,而逻辑右移需要进行补零。

  • load:用data[63:0]加载移位寄存器而不是进行移位
  • ena:选择是否进行移位
  • amount:2‘b00左移1位,2’b01左移8位,2‘b10右移1位,2’b11右移8位
  • q:移位寄存器的内容

Hint:一个5位数11000算术右移1位是11100,而逻辑右移将会生成01100

类似地,01000 算术右移 1 位是 00100,逻辑右移会产生相同的结果,因为符号位是非负数。

Solution:

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-:56]};endcaseendend
endmodule

3.2.3.4 5-bit LFSR(Lfsr5)

线性反馈移位寄存器通常带有几个异或门来产生移位寄存器的下一个状态。Galois LFSR 是一种特殊的结构,它将“tap”位与输出位进行异或以产生其下一个值。如果tap位仔细选择,可以使LFSR为最大长度。n位最大长度的LFSR在重复之前有2^n-1个状态(其中全0状态无法达到)。

下图显示了一个 5 位最大长度 Galois LFSR,其tap位于第5位和第3位。(tap通常从 1 开始编号)。请注意,为了一致性,我在第5位绘制了 XOR 门,但 XOR 门输入之一是 0。

reset将LFSR复位为1.

Hint:从 1 开始的前几个状态是 00001, 10100, 01010, 00101, ... LFSR 在返回到 00001 之前应该循环通过 31 个状态。

Solution:

module top_module(input clk,input reset,    // Active-high synchronous reset to 5'h1output [4:0] q
); always@(posedge clk)beginif(reset)q<=5'h1;elseq<={q[0]^1'b0,q[4],q[3]^q[0],q[2],q[1]};endendmodule

3.2.3.5 3-bit LFSR(Mt2015 lfsr)

为这个时序电路编写Verilog代码(可以有子模块,但顶层必须命名为top_module)。假设您要在 DE1-SoC 板上实现电路。将 R 输入连接到 SW 开关,将Clock连接到 KEY[0],将 L 连接到 KEY[1]。将 Q 输出连接到红灯 LEDR。

该电路是线性反馈移位寄存器 (LFSR) 的一个示例。最大周期 LFSR 可用于生成伪随机数,因为它在重复之前循环2^n-1个组合。全零组合不会出现在此序列中。

Solution:

module top_module (input [2:0] SW,      // Rinput [1:0] KEY,     // L and clkoutput [2:0] LEDR);  // Qalways@(posedge KEY[0])beginLEDR[2]<=KEY[1]?SW[2]:(LEDR[2]^LEDR[1]); LEDR[1]<=KEY[1]?SW[1]:LEDR[0];LEDR[0]<=KEY[1]?SW[0]:LEDR[2];end
endmodule

 3.2.3.6 32-bit LFSR(Lfsr32)

构建一个32位Galois LFSR,其中32、22、2、1位有tap

这题足够长,您需要使用向量,而不是 DFF 的 32 个实例化。

Solution:

module top_module(input clk,input reset,    // Active-high synchronous reset to 32'h1output [31:0] q
); reg[31:0]q_next;always@(*)beginq_next=q[31:1];q_next[31]=q[0]^1'b0;q_next[21]=q[0]^q[22];q_next[1]=q[0]^q[2];q_next[0]=q[0]^q[1];endalways@(posedge clk)beginif(reset)q<=32'h1;elseq<=q_next;endendmodule

3.2.3.7 shift register(Exams/m2014 q4k)

实现以下电路:

Solution:

module top_module (input clk,input resetn,input in,output out
);reg [3:0] sr;// Create a shift register named sr. It shifts in "in".always @(posedge clk) beginif (~resetn)        // Synchronous active-low resetsr <= 0;else sr <= {sr[2:0], in};endassign out = sr[3];     // Output the final bit (sr[3])endmodule

3.2.3.8 shift register(Exams/m2014 q4b)

考虑如下n-bit移位寄存器电路:

为移位寄存器编写一个顶层 Verilog 模块(名为 top_module),假设 n = 4。在顶层模块中实例化 MUXDFF 子电路的四个副本。假设您要在 DE2 板上实现电路。

  • 将R输入连接到SW开关
  • clk连接到KEY[0]
  • E连接到KEY[1]
  • L连接到KEY[2]
  • w连接到KEY[3]
  • 输入连接到红灯LEDR[3:0]

(重复使用来自Exams/2014 q4a - HDLBits的 MUXDFF。)

Solution:

module top_module (input [3:0] SW,input [3:0] KEY,output [3:0] LEDR
); //MUXDFF DFF3(KEY[0],KEY[3],SW[3],KEY[1],KEY[2],LEDR[3]);MUXDFF DFF2(KEY[0],LEDR[3],SW[2],KEY[1],KEY[2],LEDR[2]);MUXDFF DFF1(KEY[0],LEDR[2],SW[1],KEY[1],KEY[2],LEDR[1]);MUXDFF DFF0(KEY[0],LEDR[1],SW[0],KEY[1],KEY[2],LEDR[0]);endmodulemodule 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

3.2.3.9 3-input LUT(Exams/ece241 2013 q12)

在这个问题中,您将为 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))。

Solution:

module top_module (input clk,input enable,input S,input A, B, C,output reg Z
);reg [7:0] q;  // 构建一个8选1数据选择器,有很多方式来写,比如组合逻辑块中的case语句assign Z = q[ {A, B, C} ];// 当使能时,左移1位,舍弃q[7],移入S always @(posedge clk) beginif (enable)q <= {q[6:0], S};   endendmodule

学到了新的表达

assign Z = q[ {A, B, C} ];

LUT很重要,在FPGA中用来代替门电路

Verilog HDLBits 第十三期:3.2.3 Shift Registers相关推荐

  1. 高级转录组调控分析和R语言数据可视化第十三期 (线上线下,7月底开课)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.转录组线上直播课.报名参加线上直播课的老师可在365天内选择参加同课程的一次线下课 .期待和大家的 ...

  2. 高级转录组分析和R语言数据可视化第十三期 (线上线下同时开课)

    " 福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次线 ...

  3. 微信小程序周报(第十三期)-极乐商店(store.dreawer.com)出品

    重要:极乐商店域名变更:wxapp.dreawer.com/变更为store.dreawer.com/ 每周一笑 当年刚学打篮球的时候,疯狂地迷恋上了乔丹,然后迷恋上了NIKE,更熟记了NIKE的那句 ...

  4. 高级转录组调控分析和R语言数据可视化第十三期 (线上/线下同时开课)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程.转录组线上直播课.报名参加线上直播课的老师可在365天内选择参加同课程的一次线下 ...

  5. 高级转录组调控分析和R语言数据可视化第十三期 (线上线下开课)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程.转录组线上直播课.报名参加线上直播课的老师可在365天内选择参加同课程的一次线下 ...

  6. 高级转录组调控分析和R语言数据可视化第十三期 (线上线下同时开课)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程.转录组线上直播课.报名参加线上直播课的老师可在365天内选择参加同课程的一次线下 ...

  7. 智能运维实践——魅族技术开放日第十三期现场纪实

    10 月 20 日,由魅族科技联合Flyme.麦思博(msup)有限公司.百度云主办的第十三期魅族技术开放日"智能运维实践"在深圳虚拟大学园触梦社区顺利召开,近200位运维从业者齐 ...

  8. 高级转录组调控分析和R语言数据可视化第十三期 (后天开课)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程.转录组线上直播课.报名参加线上直播课的老师可在365天内选择参加同课程的一次线下 ...

  9. [软件评测第十三期]echo回声

    [软件评测第十三期]echo 回声 作者:杨润康 评测软件名称: echo 回声 软件图标 软件简介: echo是什么东西?如果你是资深的程序员,你一定认为它是 DOS批处理命令的一条子命令.但是其实 ...

最新文章

  1. 一个Python小白5个小时爬虫经历
  2. ModelFileType:XML、Hdf5、dat等不同模型文件后缀文件的简介、使用方法之详细攻略
  3. CMS - tabBar
  4. c++学习笔记之友元函数
  5. Libsvm分类步骤
  6. [蓝桥杯][基础练习VIP]FJ的字符串-递归
  7. Visio显示不完整
  8. matlab画无量纲速度分布,麦克斯韦分布与概率论中典型分布的比较教学
  9. 崩坏3人物模型详解—是次世代还是手绘?
  10. python tqdm记录dataframe使用iterrows或iteritems循环行或循环列时的进度
  11. python的神经网络模块接法图解_图神经网络库PyTorch geometric
  12. js获取本地文件夹和文件 .
  13. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
  14. mac下解决中文乱码的问题
  15. java审批流_activiti实现工作流审批
  16. 需要在计算机安装msxml版本,Win7安装Office2010提示需要MSXML 6.10.1129.0组件怎么办?...
  17. 五个手指含义(必会)
  18. java 取余 负数_Java中有关负数取余的计算
  19. STK中心天体cb等相关文件说明
  20. 【本人秃顶程序员】程序员不要去这样的公司

热门文章

  1. asp.net请销假及人员在位管理系统
  2. Python 深拷贝和浅拷贝区别
  3. Google框架下wallpaper_thumb制作手机壁纸缩略图攻略
  4. UI设计师如何发展 麓言信息
  5. H3CSE大规模路由综合实验
  6. 华为云排名仅为第二?市场占有率营收被阿里双碾压
  7. SY2023CTF--“安洵杯”全国精英赛MISC--烦人的压缩包
  8. 进制间的相互转换,二进制转十进制,八进制转十进制,十六转十进制
  9. python海龟绘图教程自学网_python海龟绘图实例教程
  10. jacoco统计覆盖率最佳实践