|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 xyloophone 于 2023-2-5 12:07 编辑
Vivado版本是2019.2,Modelsim是10.4版本。实际上板测试结果和Modelsim的仿真结果一致。
-----------------------------------------------------------------------------------
// test.v
`timescale 1ns / 1ps
module test(
input clk,
input rst,
input veri_en,
output reg[127:0] shift,
output reg[15:0] circnt,
output veri_valid
);
localparam CIRTIMES = 16'H20;
always@ (posedge clk, posedge rst)
if(rst)begin
circnt = 16'H0000;
end else begin
if((circnt< (16'H8000+CIRTIMES))&veri_en)
circnt = circnt+16'H0001;
else
circnt = circnt;
end
assign veri_valid = (circnt == (16'H8000+CIRTIMES));
//reg [127:0] shift;
integer j;
always@ (posedge clk, posedge rst)
if(rst)begin
shift <= 128'H0;
end else begin
if(circnt[15]&(~veri_valid))begin
shift = {shift[126:0],shift[127]};
end
else if (~circnt[15]) begin
shift <= 128'HA4CC62E3D638AB6339633ADB7E354633;
end else begin
shift <= shift;
end
end
endmodule
-----------------------------------------------------------------------------------
// test_tb.v
`timescale 1ns / 1ps
module test_tb();
reg clk;
reg rst;
reg veri_en;
wire [127:0] shift;
wire [15:0] circnt;
wire veri_valid;
always #7.3 clk <= ~clk;
initial begin
#0 clk <= 0;
#0 rst <= 1;
#0 veri_en <= 0;
#1000 rst <= 0;
#120 veri_en <= 1;
end
test u_test(
.clk ( clk ),
.rst ( rst ),
.veri_en ( veri_en ),
.circnt ( circnt ),
.shift ( shift ),
.veri_valid ( veri_valid )
);
endmodule
-----------------------------------------------------------------------------------
仿真结果得到的最终shift值不一致。Vivado仿真多进行了一次移位。下图是Vivado仿真的结果,在circnt=0x8000时进行了第一次移位,
Modelsim在在circnt=0x8001时进行第一次移位。就是这个位置不一致导致结果不一致。
这么简单的逻辑仿真软件应该不会出错。不清楚问题出在哪里。
|
|