module top_module(
input clk,
input resetn,
input [1:0] byteena,
input [15:0] d,
output reg [15:0] q
);
// Write your code here
always@(posedge clk)
begin
if(~resetn)
q <= 0;
else
case(byteena)
2'b11:q <= d;
2'b10:q[15:8] <= d[15:8];
2'b01:q[7:0] <= d[7:0];
default:q <= q;
endcase
end
endmodule
module top_module (
input clk,
input x,
output z
);
reg q1,q2,q3;
initial
begin
q1 = 0;
q2 = 0;
q3 =0;
end
always@(posedge clk)
begin
q1 <= q1 ^ x;
q2 <= (~q2) & x;
q3 <= (~q3) | x;
end
assign z = ~(q1 ^ q2 ^ q3);
endmodule
module top_module (
input clk,
input in,
output out
);
reg q1,q2;
assign out = q1 & ~q2;
initial
begin
q1 = 0;
q2 = 0;
end
always@(posedge clk)
begin
q2 <= q1;
q1 <= in;
end
endmodule
module top_module (
input clk,
input in,
output out
);
reg q1,q2;
always@(posedge clk)
begin
q2 <= q1;
q1 <= in;
end
assign out = (q1 & ~q2)|(~q1 & q2);
endmodule
module top_module(
input clk,
input areset, //异步、高有效、复位值为0
input load,
input ena,
input [3:0] data,
output reg [3:0] q);
//Write your code here
reg [1:0]s;
always@(posedge clk or negedge areset)
begin
s <= {load,ena};
if(areset)
q <= 0;
else
case(s)
2'b11:q <= data;
2'b10:q <= data;
default:q[3:0] <= {1'b0,q[3:1]};
endcase
end
endmodule
module top_module(
input clk,
input areset, // async active-high reset to zero
input load,
input ena,
input [3:0] data,
output reg [3:0] q
);
always @ (posedge clk or posedge areset)begin
if(areset)begin
q <= 4'b0;
end
else if(load)begin
q <= data;
end
else if(ena)begin
q <= {1'b0,q[3:1]};
end
else
q <= q;
end
endmodule
第一段代码会延迟一个时钟周期,想一想为什么
module top_module(
input clk,
input reset,
input en,
output reg [3:0]q);
always@(posedge clk)
begin
if(reset)
q <= 4'b0101;
else
if(en)
if(q <= 4'b0101)
q <= 4'b1111;
else
q <= q - 1;
end
endmodule
module top_module(
input clk,
input areset,
input in,
output out);
parameter A=1'b0, B=1'b1;
reg state, next_state;
always @(*)
begin
if(in)
next_state = state;
else
begin
case(state)
A:next_state = B;
B:next_state = A;
default:next_state = B;
endcase
end
end
always @(posedge clk, posedge areset)
begin
if(areset)
state <= B;
else
state <= next_state;
end
assign out = (state == B)? 1'b1 : 1'b0;
endmodule
module dut(input clk, output reg [2:0]out);
//测试模块
always @(posedge clk)
out <= out + 1'b1;
endmodule
module tb();
wire [2:0]out;//必要输出信号
//信号定义
reg clk;
parameter clk_period = 10;
//信号生成
initial begin
clk = 0;
forever
#(clk_period/2) clk = ~clk;
end
//模块例化
dut dut1(clk,out);
endmodule
module dut(input clk, output reg [2:0]out);
//测试模块
always @(posedge clk)
out <= out + 1'b1;
endmodule
module top_module(
input clk,
input [4:0] A1,A2,A3,
input [31:0] WD,
input WE,
output [31:0] RD1,RD2
);
reg [31:0] reg_file[0:31];
//初始化寄存器堆
integer i;
initial
begin
for(i=0;i<32;i=i+1) reg_file[i] = 0;
end
//写入寄存器
always@(posedge clk)
begin
if(WE&A3!=5'd0)
reg_file[A3] <= WD;
end
//读取寄存器
assign RD1 = reg_file[A1];
assign RD2 = reg_file[A2];
endmodule
这里注意第0个寄存器为只读寄存器。