当前位置:   article > 正文

HDLBits(Shift register)部分答案及解析_四位移位寄存器eda代码

四位移位寄存器eda代码

第一题:shift4:要求如下

构建一个4位移位寄存器(右移位),具有异步复位、同步加载和启用功能。

areset:重置移位寄存器为零。

load:用数据[3:0]加载移位寄存器,而不是移位。

ena:右移(q[3]变为零,q[0]移出消失)。

q:移位寄存器的内容。

如果负载和ena输入都被断言(1),则负载输入具有更高的优先级。

正确答案:(异步复位的应用):核心目标是理解该题目

  1. module top_module(
  2. input clk,
  3. input areset, // async active-high reset to zero
  4. input load,
  5. input ena,
  6. input [3:0] data,
  7. output reg [3:0] q);
  8. always@(posedge clk or posedge areset)begin
  9. if(areset)begin
  10. q[3:0]<=4'd0;
  11. end
  12. else if(load)begin
  13. q[3:0]<=data[3:0];
  14. end
  15. else if(ena)begin
  16. q[0]<=q[1];
  17. q[1]<=q[2];
  18. q[2]<=q[3];
  19. q[3]<=0;
  20. end
  21. else begin
  22. q[3:0]<=q[3:0];
  23. end
  24. end
  25. endmodule

异步复位:使输出不只受clk的影响,假如clk为posedge,当areset为posedge高电平有效的时候并不需要等到clk高电平有效才能使用,他们等级相等。

第二题:rotate100:

有没有一种可能,本题需要你尝试一下数字的翻转,比如向右旋转,是q99变成了q[0],然后是q[98:0]这样;向左便是q[0]变成了q[99],然后q[99-1]挪到一边;

翻转型号的寄存器:

正确答案:

  1. module top_module(
  2. input clk,
  3. input load,
  4. input [1:0] ena,
  5. input [99:0] data,
  6. output reg [99:0] q);
  7. always@(posedge clk)begin
  8. if(load)begin
  9. q[99:0]<=data[99:0];
  10. end
  11. else begin
  12. case(ena)
  13. 2'b01:q <= {q[0],q[99:1]};
  14. 2'b10:q <= {q[98:0],q[99]};
  15. default:q<=q;
  16. endcase
  17. end
  18. end
  19. endmodule

第三题:shift18:

该题题目要求为:

load:用数据[63:0]加载移位寄存器,而不是移位。

ena:选择是否移位。

amount:选择移动的方向和数量。

2'b00:左移1位。

2'b01:左移8位。

2'b10:右移1位。

2'b11:右移8位。

问:移位器的内容。

与前题不同的是,右移的操作是将移出来的数字附上q[63]的值,然后移一位就是一个q[63],几位就是几个q[63],但逻辑左移不同,左移只需要把数字移出来,然后空出的部分为0就可以了。

正确答案:

  1. module top_module(
  2. input clk,
  3. input load,
  4. input ena,
  5. input [1:0] amount,
  6. input [63:0] data,
  7. output reg [63:0] q);
  8. always@(posedge clk)begin
  9. if(load)begin
  10. q[63:0]<=data[63:0];
  11. end
  12. else if(ena)begin
  13. case(amount)
  14. 2'b00:
  15. q[63:0]<={q[62:0],1'b0};
  16. 2'b01:
  17. q[63:0]<={q[55:0],8'b0};
  18. 2'b10:
  19. q[63:0]<={q[63],q[63:1]};
  20. 2'b11:
  21. q[63:0]<={{8{q[63]}},q[63:8]};
  22. endcase
  23. end
  24. else begin
  25. q<=q;
  26. end
  27. end
  28. endmodule

第四题:ifsr5:

构造线性移位寄存器,reset应当使LFSR归1。

该线性移位寄存器是reset值为1的,然后从情况为1开始判断,如为0,则无法判断。

然后按照电路图来写出这个逻辑式。

正确答案:

  1. module top_module(
  2. input clk,
  3. input reset, // Active-high synchronous reset to 5'h1
  4. output [4:0] q
  5. );
  6. always@(posedge clk)begin
  7. if(reset)begin
  8. q[4:0]<=1;
  9. end
  10. else begin
  11. q[4]<=q[0]^0;
  12. q[3]<=q[4];
  13. q[2]<=q[3]^q[0];
  14. q[1]<=q[2];
  15. q[0]<=q[1];
  16. end
  17. end
  18. endmodule

第五题:mt 2015fsr:

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

  1. module top_module (
  2. input [2:0] SW, // R
  3. input [1:0] KEY, // L and clk
  4. output [2:0] LEDR); // Q
  5. wire clk;
  6. assign clk = KEY[0];
  7. always@(posedge clk)begin
  8. if(KEY[1])begin
  9. LEDR[0]<=SW[0];
  10. LEDR[1]<=SW[1];
  11. LEDR[2]<=SW[2];
  12. end
  13. else begin
  14. LEDR[0]<=LEDR[2];
  15. LEDR[1]<=LEDR[0];
  16. LEDR[2]<=LEDR[2]^LEDR[1];
  17. end
  18. end
  19. endmodule

第六题:ifsr32:

构建一个32位的Galois LFSR,其taps位置为32、22、2和1。

这道题我并不明白含义,去找了一份大佬的答案来尝试理解,大概是在0,1,21的时候,在32,22,1,的前一位的时候将该值和q[0]异或,q[31]时将q[0]和0异或。

  1. module top_module(
  2. input clk,
  3. input reset, // Active-high synchronous reset to 32'h1
  4. output [31:0] q
  5. );
  6. integer i;
  7. always @(posedge clk)begin
  8. if(reset)begin
  9. q <= 32'h1;
  10. end
  11. else begin
  12. for(i=0;i<32;i++)begin
  13. if((i==21)||(i==1)||(i==0))begin
  14. q[i] <= q[i+1] ^ q[0];
  15. end
  16. else if(i==31)begin
  17. q[31] <= 1'b0 ^ q[0];
  18. end
  19. else begin
  20. q[i] <= q[i+1];
  21. end
  22. end
  23. end
  24. end
  25. endmodule
  26. ————————————————
  27. 版权声明:本文为CSDN博主「日拱一卒_未来可期」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  28. 原文链接:https://blog.csdn.net/qq_42334072/article/details/109452144

第五题:exams/m2014q4k:

使用逻辑语言完成设计以下电路:

正确答案:

  1. module top_module (
  2. input clk,
  3. input resetn, // synchronous reset
  4. input in,
  5. output out);
  6. wire [3:0]tmp;
  7. assign out = tmp[3];
  8. always@(posedge clk)begin
  9. if(!resetn)begin
  10. tmp<=0;
  11. end
  12. else begin
  13. tmp<={tmp[2:0],in};
  14. end
  15. end
  16. endmodule

第六题:exams/2014q4b:

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

实例化方案:

将R输入连接到SW开关。

clk按下键KEY[0],

E到KEY[1],

L to KEY[2],和

w键[3]。

将输出端连接到红色指示灯LEDR[3:0]。

  1. module top_module (
  2. input [3:0] SW,
  3. input [3:0] KEY,
  4. output [3:0] LEDR
  5. ); //
  6. MUXDFF u1(.r(SW[0]), .clk(KEY[0]), .e(KEY[1]), .l(KEY[2]), .w(LEDR[1]), .q(LEDR[0]));
  7. MUXDFF u2(.r(SW[1]), .clk(KEY[0]), .e(KEY[1]), .l(KEY[2]), .w(LEDR[2]), .q(LEDR[1]));
  8. MUXDFF u3(.r(SW[2]), .clk(KEY[0]), .e(KEY[1]), .l(KEY[2]), .w(LEDR[3]), .q(LEDR[2]));
  9. MUXDFF u4(.r(SW[3]), .clk(KEY[0]), .e(KEY[1]), .l(KEY[2]), .w(KEY[3]), .q(LEDR[3]));
  10. //注意该题中的w是前面一个模块的输出,所以不需要用KEY[**],或者你可以先赋值再这样表达,单纯写KEY[**]可能是没有用的。
  11. endmodule
  12. module MUXDFF (input w,x,e,l,clk,r,output q);
  13. always@(posedge clk)begin
  14. if(e&&l)begin
  15. q<=r;
  16. end
  17. else if(e&&!l)begin
  18. q<=w;
  19. end
  20. else if(!e&&l)begin
  21. q<=r;
  22. end
  23. else begin
  24. q<=q;
  25. end
  26. end
  27. endmodule

使用了比较直观的逻辑语言,可在该基础上加以简化。

第七题:3input 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))。

正确答案:

  1. module top_module (
  2. input clk,
  3. input enable,
  4. input S,
  5. input A, B, C,
  6. output Z );
  7. reg [7:0]Q;
  8. always@(posedge clk)begin
  9. if(enable)begin
  10. Q[7:0]<={Q[6:0],S};
  11. end
  12. else begin
  13. Q<=Q;
  14. end
  15. end
  16. assign Z = Q[{A,B,C}];
  17. endmodule
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/648867
推荐阅读
相关标签
  

闽ICP备14008679号