刷题笔记是什么(【HDLBits刷题笔记】11 Shift Regiters&More Circuits)
导读:Shift4 异步复位同步置数和使能。...
Shift4
异步复位同步置数和使能 。
Rotate100
循环移位 ,通过ena信号控制左移和右移 。
module top_module(
input clk,
input load,
input [1:0] ena,
input [99:0] data,
output reg [99:0] q);
always@(posedge clk)
begin
if(load)
q <= data;
else if(ena == 2b01)
q <= {q[0],q[99:1]};
else if(ena == 2b10)
q <= {q[98:0],q[99]};
end
endmodule
Shift18
算数移位 ,注意右移的时候保留符号位,左移正常移位就可以 ,注意8{q[63]}外面要再加一个大括号。
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)
begin
if(load)
q <= data;
else if(ena) begin
case(amount)
2b00: q <= {q[62:0],1b0};
2b01: q <= {q[55:0],8b0};
2b10: q <= {q[63],q[63:1]};
2b11: q <= {{8{q[63]}},q[63:8]};
endcase
end
end
endmodule
Lfsr5
题目给的答案把组合逻辑和时序逻辑分开了 ,看起来思路会更清晰 。
module top_module(
input clk,
input reset, // Active-high synchronous reset to 5h1
output reg[4:0] q
);
always@(posedge clk)
begin
if(reset)
q <= 5h1;
else begin
q[0] <= q[1];
q[1] <= q[2];
q[2] <= q[3]^q[0];
q[3] <= q[4];
q[4] <= 1b0^q[0];
end
end
endmodule
Mt2015 lfsr
把之前写的muxdff例化一下就可以了 ,注意如果是在顶层是不推荐有逻辑的 ,逻辑可以纳入子模块中 ,可以更好的优化 。
module top_module (
input [2:0] SW, // R
input [1:0] KEY, // L and clk
output [2:0] LEDR); // Q
muxdff u0(KEY[0],KEY[1],SW[0],LEDR[2],LEDR[0]);
muxdff u1(KEY[0],KEY[1],SW[1],LEDR[0],LEDR[1]);
muxdff u2(KEY[0],KEY[1],SW[2],LEDR[1]^LEDR[2],LEDR[2]);
endmodule
module muxdff (
input clk,
input L,
input r_in,
input q_in,
output reg Q);
always@(posedge clk)
begin
Q <= L?r_in:q_in;
end
endmodule
Lfsr32
仿照Lfsr5写即可 ,注意位置是从1开始算的 。
module top_module(
input clk,
input reset, // Active-high synchronous reset to 32h1
output reg[31:0] q
);
reg [31:0]q_next;
always@(*)
begin
q_next = q[31:1];
q_next[31] = q[0];
q_next[21] = q[0]^q[22];
q_next[1] = q[0]^q[2];
q_next[0] = q[0]^q[1];
end
always@(posedge clk)
begin
if(reset)
q <= 32h1;
else
q <= q_next;
end
endmodule
Exams/m2014 q4k
module top_module (
input clk,
input resetn, // synchronous reset
input in,
output out);
reg [3:0]Q;
always@(posedge clk)
begin
if(~resetn)
Q <= d0;
else
Q <= {in,Q[3:1]};
end
assign out = Q[0];
endmodule
Exams/2014 q4b
同样是例化之前写的MUXDFF 。
module top_module (
input [3:0] SW,
input [3:0] KEY,
output [3:0] LEDR
); //
MUXDFF u3(KEY[0],LEDR[1],SW[0],KEY[1],KEY[2],LEDR[0]);
MUXDFF u2(KEY[0],LEDR[2],SW[1],KEY[1],KEY[2],LEDR[1]);
MUXDFF u1(KEY[0],LEDR[3],SW[2],KEY[1],KEY[2],LEDR[2]);
MUXDFF u0(KEY[0],KEY[3],SW[3],KEY[1],KEY[2],LEDR[3]);
endmodule
module MUXDFF (
input clk,
input w, R, E, L,
output Q
);
always@(posedge clk)
begin
Q <= L?R:(E?w:Q);
end
endmodule
Exams/ece241 2013 q12
3输入查找表 ,Xilinx的FPGA大多是基于6输入查找表构造的 。
通过一个时序逻辑改变保存的值 ,再通过一个组合逻辑输出结果 。
module top_module (
input clk,
input enable,
input S,
input A, B, C,
output Z );
reg [7:0]Q;
always@(posedge clk)
begin
if(enable)
Q <= {Q[6:0],S};
end
assign Z=Q[{A,B,C}];
endmodule
声明:本站所有文章 ,如无特殊说明或标注,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用 、采集、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!