Shift18
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)begin
q<=data;
end
else begin
if(~ena)begin
q<=q;
end
else begin
case(amount)
2'b00:begin q<={q[62:0], 1'b0}; end //左移1位;算数左移和逻辑左移一样;
2'b01:begin q<={q[55:0], 8'b0}; end //左移8位;
2'b10:begin q<={q[63], q[63:1]}; end //右移1位;算数右移,左边要补上原始符号位;
2'b11:begin q<={{8{q[63]}}, q[63:8]}; end //右移8位;
endcase
end
end
end
endmodule
Lfsr32
module top_module(
input clk,
input reset, // Active-high synchronous reset to 32'h1
output [31:0] q
);
always@(posedge clk)begin
if(reset)begin
q<=32'h1;
end
else begin
q<={0^q[0],q[31:23],q[22]^q[0],q[21:3],q[2]^q[0],q[1]^q[0]};
//tap位置为自然数位置,32位:0与q[0]异或,其他如position 22下一位及新q[21]=q[22]^q[0]为新q的21位;
end
end
endmodule
Exams/m2014 q4k
法一:移位寄存器
module top_module (
input clk,
input resetn, // synchronous reset
input in,
output out);
reg[3:0] shift;
always@(posedge clk)begin
if(~resetn)begin
shift<=0;
end
else begin
shift<={in,shift[3:1]}; //移位寄存器,右移;
end
end
assign out=shift[0];
endmodule
法二:例化
module top_module (
input clk,
input resetn, // synchronous reset
input in,
output out);
wire w3_2,w2_1,w1_0;
d d3(.clk(clk),.res(resetn),.d(in),.q(w3_2));
d d2(.clk(clk),.res(resetn),.d(w3_2),.q(w2_1));
d d1(.clk(clk),.res(resetn),.d(w2_1),.q(w1_0));
d d0(.clk(clk),.res(resetn),.d(w1_0),.q(out));
endmodule
module d(
input clk,
input res,
input d,
output q);
always@(posedge clk)begin
if(~res)begin
q<=0;
end
else begin
q<=d;
end
end
endmodule
Exams/2014 q4b
module top_module (
input [3:0] SW,
input [3:0] KEY,
output [3:0] LEDR
); //
reg D3,D2,D1,D0;
assign D3=KEY[2]?SW[3]:(KEY[1]?KEY[3]:LEDR[3]); //KEY[2]:L,KEY[1]:E;
assign D2=KEY[2]?SW[2]:(KEY[1]?LEDR[3]:LEDR[2]);
assign D1=KEY[2]?SW[1]:(KEY[1]?LEDR[2]:LEDR[1]);
assign D0=KEY[2]?SW[0]:(KEY[1]?LEDR[1]:LEDR[0]);
MUXDFF MUXDFF3 (.clk(KEY[0]),.d(D3),.q(LEDR[3]));
MUXDFF MUXDFF2 (.clk(KEY[0]),.d(D2),.q(LEDR[2]));
MUXDFF MUXDFF1 (.clk(KEY[0]),.d(D1),.q(LEDR[1]));
MUXDFF MUXDFF0 (.clk(KEY[0]),.d(D0),.q(LEDR[0]));
endmodule
module MUXDFF (
input clk,
//input res,
input d,
output q);
always@(posedge clk)begin
q<=d;
end
endmodule
Exams/ece241 2013 q12
法一:移位寄存器
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)begin
Q<=Q;
end
else begin
Q<={Q[6:0],S};
end
end
always@(*)begin //若时钟上升沿,非阻塞赋值有一个clock的时延;组合逻辑阻塞赋值没有时延;
case({A,B,C})
3'h0:begin Z=Q[0]; end
3'h1:begin Z=Q[1]; end
3'h2:begin Z=Q[2]; end
3'h3:begin Z=Q[3]; end
3'h4:begin Z=Q[4]; end
3'h5:begin Z=Q[5]; end
3'h6:begin Z=Q[6]; end
3'h7:begin Z=Q[7]; end
endcase
end
endmodule
法二:例化
module top_module (
input clk,
input enable,
input S,
input A, B, C,
output Z );
reg[7:0] Q;
d d0(.clk(clk),.ena(enable),.d(S),.q(Q[0]));
d d1(.clk(clk),.ena(enable),.d(Q[0]),.q(Q[1]));
d d2(.clk(clk),.ena(enable),.d(Q[1]),.q(Q[2]));
d d3(.clk(clk),.ena(enable),.d(Q[2]),.q(Q[3]));
d d4(.clk(clk),.ena(enable),.d(Q[3]),.q(Q[4]));
d d5(.clk(clk),.ena(enable),.d(Q[4]),.q(Q[5]));
d d6(.clk(clk),.ena(enable),.d(Q[5]),.q(Q[6]));
d d7(.clk(clk),.ena(enable),.d(Q[6]),.q(Q[7]));
always@(*)begin //若时钟上升沿,非阻塞赋值有一个clock的时延;组合逻辑阻塞赋值没有时延;
case({A,B,C})
3'h0:begin Z=Q[0]; end
3'h1:begin Z=Q[1]; end
3'h2:begin Z=Q[2]; end
3'h3:begin Z=Q[3]; end
3'h4:begin Z=Q[4]; end
3'h5:begin Z=Q[5]; end
3'h6:begin Z=Q[6]; end
3'h7:begin Z=Q[7]; end
endcase
end
endmodule
module d(
input clk,
input ena,
input d,
output q);
always@(posedge clk)begin
if(~ena)begin
q<=q;
end
else begin
q<=d;
end
end
endmodule