不能全0:4位除去0000,还有15种
m_gen.v:
// 2022-1-20 verilog学习
// 四级伪随机码发生器
`timescale 1ns/10ps
module m_gen(
clk, // 时序电路三大样: clk,res,y
res,
y
);
input clk;
input res;
output y;
reg[3:0] d; // 4位触发器 _ _ _ _
assign y = d[0];
always@(posedge clk or negedge res)
if(~res) begin
d <= 4'b1111; // 不能全0,用1111复位(周期为0001-1111)
end
else begin
d[2:0] <= d[3:1]; // 右移一位 (1110->_111)
d[3] <= d[3]+d[0]; // 模二加(=异或=只相加,不进位)
end
endmodule
// testbench 测试台
module m_gen_tb;
reg clk,res;
wire y;
m_gen m_gen(
.clk(clk),
.res(res),
.y(y)
);
initial begin
clk<=0; res<=0;
#17 res<=1;
#600 $stop; // _ _ _ _除去0000一个周期15种,150ns一圈,600ns跑4圈
end
always #5 clk = ~clk; // 5ns时钟翻转一次,10ns一个周期
endmodule
modelsim 仿真:
只加入选中信号(selected),不加入object中所有信号(in region)
触发器 d[i] 是触发器 d[i-1] 的后移