序章
今年の海康のインターンシップ機械テストに関する別の質問を記録しましょう。これは比較的簡単です。異なる時間に到来する複数のインパルス信号の融合について。
トピックの説明
eof は 1 つのイベントの終了パルスを示します。順序が不確かな 2 つのイベントが終了したことを示すには、2 つの終了パルスを融合して 1 つのパルスを出力する必要があり、次のコードをクリアして改善する必要があります。
module event_merge(
input clk,
input rst_n,
input eof1,//脉冲信号,时长:1个clock
input eof2,//脉冲信号,时长:1个clock
output wire eof
);
一連の考え
最も単純なアイデアはパルスをカウントすることですが、もちろん、バグを避けるためにイベント パルスの同時到着も考慮する必要があります。他にアイデアがある場合は、コメント欄にコメントしてください~~
問題解決
設計コード:
// ========================================================================
// 功能描述:-1- 将两个事件脉冲融合为1个脉冲
// 作者:Xu Y. B.
// 时间:2023-05-08
// ========================================================================
`timescale 1ns / 1ps
module event_merge(
input clk,
input rst_n,
input eof1,//脉冲信号,时长:1个clock
input eof2,//脉冲信号,时长:1个clock
output wire eof
);
reg [1:0] count;
always @ (posedge clk)
begin
if(~rst_n)
begin
count <= 0;
end
else if(count == 2)
begin
count <= 0;
end
else if(&{eof1,eof2})
begin
count <= 2;
end
else if(|{eof1,eof2})
begin
count <= count + 1;
end
end
assign eof = count == 2;
endmodule
シミュレーションコード:
// ========================================================================
// 功能描述:-1- 仿真测试模块 event_merge 功能
// 作者:Xu Y. B.
// 时间:2023-05-08
// ========================================================================
`timescale 1ns / 1ps
module tb_event_merge();
reg clk;
reg rst_n;
reg eof1;//脉冲信号,时长:1个clock
reg eof2;//脉冲信号,时长:1个clock
wire eof;
initial clk = 0;
always #10 clk = ~clk;
initial
begin
rst_n = 0;
eof1 = 0;
eof2 = 0;
#103;
@(posedge clk)
rst_n <= 1'b1;
// case1 : eof2 先到来 ,eof1 后到来
#1034;
@(posedge clk)
eof2 <= 1'b1;
@(posedge clk)
eof2 <= 1'b0;
#2098;
@(posedge clk)
eof1 <= 1'b1;
@(posedge clk)
eof1 <= 1'b0;
// case2 : eof1 先到来 ,eof2 后到来
#1034;
@(posedge clk)
eof1 <= 1'b1;
@(posedge clk)
eof1 <= 1'b0;
#2098;
@(posedge clk)
eof2 <= 1'b1;
@(posedge clk)
eof2 <= 1'b0;
// case3 : eof1 ,eof2 同时到来
#1034;
@(posedge clk)
eof1 <= 1'b1;
eof2 <= 1'b1;
@(posedge clk)
eof1 <= 1'b0;
eof2 <= 1'b0;
#2309;
$finish;
end
event_merge INST_event_merge (.clk(clk), .rst_n(rst_n), .eof1(eof1), .eof2(eof2), .eof(eof));
endmodule
シミュレーション結果: