152|4

357

帖子

2

资源

一粒金砂(高级)

同一个vivado工程不能有多个仿真文件吗? [复制链接]

新建了一个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

 


回复

357

帖子

2

资源

一粒金砂(高级)

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


回复

357

帖子

2

资源

一粒金砂(高级)

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


回复

357

帖子

2

资源

一粒金砂(高级)

发现问题了:

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

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

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

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

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


回复

1

帖子

0

资源

一粒金砂(初级)

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


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表