锆石科技社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 256|回复: 4

VWF仿真波形问题,为什么和我自己的思路不同

[复制链接]

18

主题

61

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
发表于 2016-10-21 10:00:35 | 显示全部楼层 |阅读模式
本帖最后由 锆石科技解答员 于 2016-10-21 11:26 编辑

低层文件:
module test1(mul_a,mul_b,clk,rst_n,mul_res);

        parameter W_A=4;
        parameter W_B=3;
        parameter W_C=(W_A)+(W_B);
        input [W_A-1:0] mul_a;
        input [W_B-1:0] mul_b;
        input clk;
        input rst_n;
        output [W_C-1:0] mul_res;

        reg [W_C-1:0]mul_abc;
        reg [W_C-1:0]mul_res;
        
        always @(*)
                mul_abc=mul_a*mul_b;
               
        always @(posedge clk or negedge rst_n)
                begin
                        if(!rst_n)        mul_res<=0;
                        else mul_res=mul_abc;
                end
endmodule

顶层文件:
module test_1
(
        din_a,
        din_b,
        din_c,
        din_d,
        sel_a,
        sel_b,
        clk,
        rst_n,
        result_a,
        result_b
);
        parameter A_W=3;
        parameter B_W=2;
        parameter C_W=4;
        parameter sel_A=A_W+C_W;
        parameter sel_B=B_W+C_W;
        
        input [A_W-1:0]din_a;
        input [B_W-1:0]din_b;
        input [C_W-1:0]din_c,din_d;
        input sel_a,sel_b;
        input clk;
        input rst_n;
        
        output [sel_A-1:0]result_a;
        output [sel_B-1:0]result_b;
        
        reg Q_1;
        reg [C_W-1:0]din_4;
        reg [sel_A-1:0]result_a;
        reg [sel_B-1:0]result_b;
        wire [sel_A-1:0]Q_2;
        wire [sel_B-1:0]Q_3;
        
        always@(posedge clk or negedge rst_n)
                begin
                        if(!rst_n) Q_1<=0;
                        else Q_1<=sel_a&&sel_b;
                end
               
        always@(*)
                begin
                        if(Q_1==0) din_4=din_c;
                        else if(Q_1==1) din_4=din_d;
                end
        
        test1#(.W_B(4),.W_A(3)) test_a(
                .mul_a(din_a),
                .mul_b(din_4),
                .clk(clk),
                .rst_n(rst_n),
                .mul_res(Q_2)
        );
        
        test1#(.W_B(4),.W_A(2)) test_2(
                .mul_a(din_b),
                .mul_b(din_4),
                .clk(clk),
                .rst_n(rst_n),
                .mul_res(Q_3)
        );
        
        always@(posedge clk or negedge rst_n)
                begin
                        if(!rst_n) result_a<=0;
                        else result_a<=Q_2;
                end
               
        always@(posedge clk or negedge rst_n)
                begin
                        if(!rst_n) result_b<=0;
                        else result_b<=Q_3;
                end
endmodule



波形为什么会出现那样的结果啊???





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2016-10-21 11:15:09 | 显示全部楼层
本帖最后由 锆石科技解答员 于 2016-10-21 11:17 编辑

结果和程序是匹配的,你的程序是不是想要实现:
当sel_a && sel_b = 0时,就输出a * c和b * c的值。
当sel_a && sel_b = 1时,就输出a * d和b * d的值。
你可以把mul_res的结果添加到VWF仿真中看看,也就是Q_2和Q_3的值。
回复 支持 反对

使用道具 举报

18

主题

61

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
 楼主| 发表于 2016-10-21 11:20:31 | 显示全部楼层
锆石科技解答员 发表于 2016-10-21 11:15
结果和程序是匹配的,你的程序是不是想要实现:
当sel_a && sel_b = 0时,就输出a * c和b * c的值。
当se ...

好的,我试试
回复 支持 反对

使用道具 举报

18

主题

61

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
 楼主| 发表于 2016-10-21 11:37:25 | 显示全部楼层
锆石科技解答员 发表于 2016-10-21 11:15
结果和程序是匹配的,你的程序是不是想要实现:
当sel_a && sel_b = 0时,就输出a * c和b * c的值。
当se ...

Q_2与Q_3不是端口如何显示啊?
回复 支持 反对

使用道具 举报

发表于 2016-10-21 11:57:54 | 显示全部楼层
201406002105 发表于 2016-10-21 11:37
Q_2与Q_3不是端口如何显示啊?

那就把Q_2和Q_3声明成端口就可以显示了。
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|小黑屋|锆石科技社区 ( 苏ICP备15059756号  

GMT+8, 2019-5-27 03:08 , Processed in 0.139073 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表