[求助] 同一个vivado工程不能有多个仿真文件吗?

1nnocent   2022-6-23 10:04 楼主

新建了一个vivado工程文件,开始只有uv_calculation和仿真文件vtf_uv_calculation,

经过仿真看波形都是没有问题的。

后面增加了scaler_3to2和仿真文件vtf_scaler_3to2,并设置为顶层文件后仿真结果全是“Z”和“X”,添加文件后的层级关系如下图:

image.png  添加scaler文件后的仿真结果(不论是calculation还是scaler的仿真输出都是“Z”,和“X”):

calculation仿真(输出波形还多了u_d和u_v,仿真激励文件没有定义这两个变量):

image.png  
image.png  scaler文件仿真波形:

image.png  

 

其中calculation文件之前仿真过没有问题的,添加scaler之后就出问题了,

现在把calculation单独复制出来新建工程测试是没问题的:

image.png  

最后附上calculation和scaler的代码:

uv_calculation:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/06/23 09:39:54
// Design Name: 
// Module Name: uv_calculation
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module uv_calculation(
    input           clk,
    input           rst_n,
    input           col_cnt,
    input           row_cnt,
    output [9:0]    u,
    output [9:0]    v
    );
    reg [10:0]   u_d;
    reg [10:0]   v_d;
    always@(posedge clk or negedge rst_n) begin
    if(rst_n == 1'b0) begin
        u_d <= 10'd0;
        v_d <= 10'd0;
    end
    else begin
            u_d <= col_cnt * 10'd1023 * 3 / 2 - col_cnt * 10'd1023;
            v_d <= row_cnt * 10'd1023 * 3 / 2 - row_cnt * 10'd1023;
        end
    end
    assign u = u_d;
    assign v = v_d;
endmodule

vtf_uv_calfulation:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/06/23 09:40:57
// Design Name: 
// Module Name: vtf_uv_calculation
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module vtf_uv_calculation(

    );
    reg     clk;
    reg     rst_n;
    reg     col_cnt;
    reg     row_cnt;
    wire [9:0]   u;
    wire [9:0]   v;
uv_calculation uut
(
    .clk(clk),
    .rst_n(rst_n),
    .col_cnt(col_cnt),
    .row_cnt(row_cnt),
    .u(u),
    .v(v)
    );
    initial begin
        clk = 0;
        rst_n = 0;
        col_cnt = 0;
        row_cnt = 0;
        #50;
            clk = 1;
            rst_n = 1;
    end
    always #5 clk = ~clk;
    always@(posedge clk) begin
        col_cnt = {$random}%2;
        row_cnt = {$random}%2;
    end
endmodule

scaler_3to2:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/06/22 17:05:46
// Design Name: 
// Module Name: scaler_3to2
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module scaler_3to2(
    input           clk,
    input           rst_n,
    input   [ 9: 0] u,
    input   [ 9: 0] v,
    input   [23: 0] ref_data00,
    input   [23: 0] ref_data01,
    input   [23: 0] ref_data10,
    input   [23: 0] ref_data11,
    output          pix_valid,
    output  [23: 0] pix_out
    );
    reg     [23: 0] pix_out_d;
    reg             pix_valid_d;
    reg     [ 7: 0] ref_red;
    reg     [ 7: 0] ref_green;
    reg     [ 7: 0] ref_blue;
    assign pix_out = pix_out_d;
    assign pix_valid = pix_valid_d;
    always@(posedge clk or negedge rst_n) begin
        if(rst_n == 1'b0) begin
            pix_out_d <= 24'd0;
            pix_valid_d <= 1'b0;
        end
        else begin
            pix_out_d <= (11'd1023 - u) * (11'd1023 - v) * ref_data00 + (11'd1023 - v) * u * ref_data10
            + (11'd1023-u) * v * ref_data01 + u * v * ref_data11;
            pix_valid_d <= 1'b1;
        end
    end
endmodule

vtf_scaler_3to2:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/06/22 17:20:15
// Design Name: 
// Module Name: vtf_scaler_3to2
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module vtf_scaler_3to2();
    reg             clk;
    reg             rst_n;
    reg     [ 9: 0] u;
    reg     [ 9: 0] v;
    reg     [23: 0] ref_data00;
    reg     [23: 0] ref_data01;
    reg     [23: 0] ref_data10;
    reg     [23: 0] ref_data11;
    wire            pix_valid;
    wire    [23: 0] pix_out;
    
scaler_3to2 uut
(
    .clk(clk),
    .rst_n(rst_n),
    .u(u),
    .v(v),
    .ref_data00(ref_data00),
    .ref_data01(ref_data01),
    .ref_data10(ref_data10),
    .ref_data11(ref_data11),
    .pix_valid(pix_valid),
    .pix_out(pix_out)
    );
    initial begin
        clk = 0;
        rst_n = 0;
        u = 10'd0;
        v = 10'd0;
        ref_data00 = 24'd0;
        ref_data01 = 24'd0;
        ref_data10 = 24'd0;
        ref_data11 = 24'd0;
        #50;
            clk = 1;
            rst_n = 1;
    end
    always #5 clk = ~clk;
    always@(posedge clk) begin
        u = {$random}%2;
        v = {$random}%2;
        ref_data00 = {$random};
        ref_data01 = {$random};
        ref_data10 = {$random};
        ref_data11 = {$random};
    end
endmodule

 

回复评论 (7)

之前也有发过一次帖子问过类似的问题,后面不知道怎么又可以了,之前应该也是新建工程之后可以的,应该跟这次经历差不多,不知道有没有人知道具体是什么原因呢?

点赞  2022-6-23 10:08

这个有点反人类啊,总不能每写一个模块都新建一个工程,都单独在新工程里面仿真把

点赞  2022-6-23 10:14

发现问题了:

设置顶层文件的时候出错了,源文件设置顶层文件时正确的,

仿真文件设置错误,应该将vtf……设置成顶层文件,而不是uut……设置为顶层

image.png  但是还是存在一个问题,就是切换顶层仿真文件时,关闭上次的仿真窗口之后,再仿真会出现文件占用情况。

image.png  百度上说要关闭这个窗口(点叉叉):

image.png  但是好像没有用,实际上要关闭整个工程大退软件之后重开仿真才行,不知道是不是软件的问题,目前用的版本是2019.1

点赞  2022-6-23 10:54

试试在导航栏的仿真那里右键关闭仿真

点赞  2022-6-24 17:28

重新设置一下顶层文件呗

点赞  2022-7-13 20:49
引用: chess20052006 发表于 2022-7-13 20:49 重新设置一下顶层文件呗

可以设置,问题是设置完之后再进行第二次仿真时会有问题,只能把软件关掉重开,才能进行第二次仿真

点赞  2022-7-14 16:22

最近也在搞这个,一头雾水。FPGA的思想挺难懂的。

点赞  2022-7-26 17:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复