菜鸟一枚,当时做这道题花了很久感觉不太对,然后用quartus来看波形图最后才写出来,感觉应该没问题了吧。
原题目是这样的:
输入:1位输入,
每一帧数据是256bit
每一帧数据的前16bit为帧头
检测帧头为0xff00为正确格式
连续监测3个正确帧头就可以输出同步信号fsync_o
并且同步信号持续16个时钟周期,覆盖帧头。
module seq_detect(
input clk,
input rst_n,
input d_i,
output reg fsync_o,
output reg d_o,
//用于观测数据
output reg[3:0] seq_cnt,
output reg[3:0] data_cnt,
output reg[15:0] data_r,
output reg header_add_flag,
output reg [1:0] state,
output reg [1:0] next_state
);
//reg [1:0] header_cnt; //计算帧头数量,大于三个的时候才能输出同步信号
//reg [3:0] seq_cnt; //帧头内部的单比特计数,计满16位开始比较帧头
//reg [3:0] data_cnt; //数据的计数,连同帧头有16个16位数据,这256个数据记为一帧
//reg [15:0] data_r; //数据缓存,用于比较帧头是否为0xff00
//wire header_add_flag; //帧头正确标识
//检测帧头是否为0xff00
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
// reset
header_add_flag<=1'b0;
end
else if(data_r==16'hff00) begin
header_add_flag <= (seq_cnt==4'd0&&data_cnt==4'd1)?1:0;
end
else begin
header_add_flag <= 1'b0;
end
end
parameter S0=2'b00;
parameter S1=2'b01;
parameter S2=2'b10;
parameter S3=2'b11;
//缓存一次16bit数据
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
// reset
data_r<=16'd0;
end
else begin
data_r<={data_r[14:0],d_i};
end
end
//每个帧头的计数
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
// reset
seq_cnt<=4'd0;
end
else begin
seq_cnt<=(seq_cnt==4'd15)?4'd0:(seq_cnt+1'b1);
end
end
//一帧有16个16bit组成,用来计数每一帧的计数器
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
// reset
data_cnt<=4'd0;
end
else if (seq_cnt==4'd15) begin
if (data_cnt==4'd15) begin
data_cnt<=4'd0;
end
else begin
data_cnt<=data_cnt+1'b1;
end
end
else begin
data_cnt<=data_cnt;
end
end
//状态机
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
// reset
state<=S0;
end
else begin
state<=next_state;
end
end
always @(*) begin
next_state = S0;
case(state)
S0:begin
next_state = header_add_flag?S1:S0;
end
S1:begin
next_state = header_add_flag?S2:((seq_cnt==4'd1&&data_cnt==4'd1)?S0:S1);
end
S2:begin
next_state = header_add_flag?S3:((seq_cnt==4'd1&&data_cnt==4'd1)?S0:S2);
end
S3:begin
next_state = header_add_flag?S3:((seq_cnt==4'd1&&data_cnt==4'd1)?S0:S3);
end
default:next_state = S0;
endcase
end
reg[3:0] o_cnt;//用于计数持续16bit的同步计数器
always@(posedge clk or negedge rst_n)begin
if(~rst_n) begin
fsync_o<=1'b0;
o_cnt<=4'b0;
end
else if(next_state==S3)begin
if(header_add_flag)begin
fsync_o<=1'b1;
o_cnt<=1'b0;
end
else if(o_cnt==4'd15) begin
o_cnt<=4'b0;
fsync_o<=1'b0;
end
else begin
fsync_o<=fsync_o;
o_cnt<=o_cnt+1'b1;
end
end
end
//用于使同步信号和输出目标对齐
reg [15:0] d_r;
reg [15:0] d_rr;
always@(posedge clk or negedge rst_n)begin
if(~rst_n)begin
d_o<=1'b0;
d_r<=16'd0;
d_rr<=16'd0;
end
else begin
d_rr <= {d_r[14:0],d_i};
d_o <= d_rr;
end
end
endmodule
写的比较乱,加了些注释
下面是TB
`timescale 1ns/10ps
module seq_detect_tb();
reg clk;
reg rst_n;
reg d_i;
wire fsync_o;
wire d_o;
wire [3:0]seq_cnt;
wire [3:0]data_cnt;
wire[15:0] data_r;
wire header_add_flag;
wire [1:0] state;
wire [1:0] next_state;
seq_detect seq_detect(
.clk(clk),
.rst_n(rst_n),
.d_i(d_i),
.fsync_o(fsync_o),
.d_o(d_o),
.seq_cnt(seq_cnt),
.data_cnt(data_cnt),
.data_r(data_r),
.header_add_flag(header_add_flag),
.state(state),
.next_state(next_state)
);
initial clk=1;
always #10 clk=~clk;
initial begin
rst_n=1'b0;
d_i=1'b0;
#200;
rst_n=1'b1;
//1
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
//2
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
//3
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
//4
d_i=0;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=1;#20;d_i=1;#20;d_i=1;#20;d_i=1;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20; d_i=0;#20;d_i=0;#20;d_i=0;#20;d_i=0;#20;
$stop;
end
endmodule
不是很会写tb,所以搞了这么多
下面是波形图
总之就是写的很垃圾但能跑就完事了
另外附3个智力题,卷子总共这四道题
3、三顶黑帽子,2顶白帽子,5个人从前到后站成一排,每人戴一顶帽子,每个人都不能看到自己和后面人的帽子颜色,只能看到前面的,第一个人谁的帽子也看不到,最后一个人能看到4个人的帽子。让每个人来猜测自己的帽子颜色,从第一个人来问,第一个人说不知道,第二个人也说不知道,第三个人也说不知道,第四个人说我知道我带着什么颜色的帽子,第五个人说我也知道,回过来第三个人说我也知道了,第二个人说我也知道了,第一个人说我也知道了,请问这五个人分别带着什么帽子,简述推理过程。
第三个人说自己不知道的话,则前两个人不可能同时是白帽子(自己为黑色),可能黑白,黑黑或者白黑(自己不确定)。
第四个人知道自己带着什么帽子,可能前三个都是黑色,则他铁定是白色,若前三个里两白一黑,那么他铁定是黑色。
第五个人肯定知道,所以没有价值。
回过头来,若第三个人知道第四个人能确定自己的颜色时,自己也能确定颜色,会推测:
1、前面三黑,后面俩白。
2、前面白白黑,后面俩黑。
综上有三种情况:
黑黑黑白白
白黑白黑黑
黑白白黑黑
第二人知道第三人能确定自己的情况后,得知后面为两百一黑或者两黑一白。但是不确定。
两黑一白的情况下,自己和前面的人相反。
两百一黑的情况下,自己和前面相同。
若看到前面是黑色的话,他不知道自己是黑的还是白的。若前面是白的,那他自己肯定是黑的。
综上。白黑白黑黑
4、猜牌问题 S、P、Q三人知道桌子抽屉里有16张牌,
♥AQ4,♠J84273,♣KQ546,♦A5.
约翰教授从十六张牌抽出一张,把点数告诉P先生,花色告诉Q先生。并问P和Q:你们能从已知点数或者花色中推理出这张牌吗?
P:我不知道这张牌。
Q:我知道你不知道这张牌。
P:现在我知道这张牌了。
Q:我也知道了。
第一句我们知道可能是AQ45这四种数字,对应的是♥AQ4♠4♣Q54♦A5几张牌。
第二句知道在先开始Q就知晓花色必须是全覆盖所有的,也就是说在P开口之前,Q就知道不可能是♠和♣了。所以锁定到♥AQ4♦A5五张牌。
第三句P知道是♥♦了,所以自己已知点数,那就不可能是A。所以可能是Q45三种点数。
第四句Q也知道了,可能是♥Q,♥4,♦5,那自己只可能拿的是♦5才能确定。
海盗分金币,不过他问的是6个人,再往前推一层就行
5号绝对安全,不会被扔到大海,他的策略为,前面的人全部死光,独享金币。
4号必须前面有人活着他才能活,否则就会被5号投出去,不管4号如何分配,5号一定会投反对票独享金币,即使是4号把所有金币全部给5号,5号为了安全会投反对票扔出4号。
3号决策一定是100:0:0,这样的话3和4一起赞成,因为4号无理由支持3号活下去。
2号经过推理也能知道3号的策略,4号和5号也知道如果3号活下来会一分不给他俩,所以2号只要给4和5一点点恩惠就能换来他俩的支持,于是2号可以分配98:0:1:1.
1号也能摸索出2号的方案,给出3号、4号和5号比2号更有诱惑力的金币就可以收买人心。2号希望1号死那就不会投票,所以不给2号,给3号一枚金币来换取支持,再给4和5任意一个人一枚金币,没收另一人的金币就可以,所以最后是
97:0:1:2:0
97:0:1:0:2