在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 2456|回复: 9

[求助] Verilog自定义函数中可以加流水线技术吗?

[复制链接]
发表于 2021-3-10 08:48:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
比如插寄存器这种

    function    [2:0]    add3_new;
        input   A,B,C,D,E,F,G;
                  reg [1:0] temp_1;
                  reg [1:0] temp_2;
                  reg [1:0] temp_3;
                  reg [2:0] temp_4;
                  reg [2:0] temp_5;
    begin
                        temp_1 = A+B;
                        temp_2 = C+D;
                        temp_3 = E+F;

                        temp_4 = temp_1+temp_2;
                        temp_5 = temp_3+G;                       
                        add3_new = temp_4 + temp_5 ;
    end
    endfunction


这个加法器有没有什么办法可以减小路径时延呢?比如用时钟打一下分别输出temp_1、temp_2、temp_3?
谢谢了

发表于 2021-3-10 10:05:32 | 显示全部楼层
函数不能有延迟,时序逻辑
回复 支持 反对

使用道具 举报

发表于 2021-3-10 11:02:18 | 显示全部楼层
不用function实现,直接改成流水线实现应该是可以的,就是需要记得第一笔数据应该是delay几个时钟之后才会输出数据!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 09:39:22 | 显示全部楼层


   
miccjiang 发表于 2021-3-10 10:05
函数不能有延迟,时序逻辑


哦哦,谢谢了
主要是模块中需要进行类似的操作几十次,所以定义了函数来实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 09:44:53 | 显示全部楼层


   
fhy420462303 发表于 2021-3-10 11:02
不用function实现,直接改成流水线实现应该是可以的,就是需要记得第一笔数据应该是delay几个时钟之后才会 ...


嗯嗯,模块中类似的操作需要进行几十次,因此定义了函数来调用,这种情况应该怎么解决呢?
回复 支持 反对

使用道具 举报

发表于 2021-3-11 10:20:15 | 显示全部楼层


   
come_on_sn 发表于 2021-3-11 09:44
嗯嗯,模块中类似的操作需要进行几十次,因此定义了函数来调用,这种情况应该怎么解决呢?
...


改成module,然后调用module 呗 !
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-15 23:04:58 | 显示全部楼层
本帖最后由 come_on_sn 于 2021-3-15 23:08 编辑


   
fhy420462303 发表于 2021-3-11 10:20
改成module,然后调用module 呗 !


您好,我写了下面的module,但是一直提示else附近有error,能麻烦帮忙看下吗?谢谢了

module add3(val,A,B,C,D,E,F,G,clk,reset);

    input   A,B,C,D,E,F,G;
         input   clk, reset;
         output  [2:0] val;
         
         reg [2:0] val;
    reg [1:0] temp_1;
         reg [1:0] temp_2;
         reg [1:0] temp_3;
                  
         reg [2:0] temp_4;
         reg [2:0] temp_5;

    always@(posedge clk or posedge reset)
    begin
        if (reset == 1'b1)
                                temp_1 <= 2'd0;
                                temp_2 <= 2'd0;
                                temp_3 <= 2'd0;
                                temp_4 <= 3'd0;
                                temp_5 <= 3'd0;
                                val    <= 3'd0;                                
        else
                                temp_1 <= A + B;
                                temp_2 <= C + D;
                                temp_3 <= E + F;
                                temp_4 <= temp_1 + temp_2;
                                temp_5 <= temp_3 + G;
                               val <= temp_4 + temp_5;                                    
    end
endmodule

回复 支持 反对

使用道具 举报

发表于 2021-3-16 09:04:49 | 显示全部楼层
if语句里缺begin end
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-16 09:44:35 | 显示全部楼层


   
come_on_sn 发表于 2021-3-15 23:04
您好,我写了下面的module,但是一直提示else附近有error,能麻烦帮忙看下吗?谢谢了

module add3(val,A, ...


知道问题出在哪里,少了begin end
回复 支持 反对

使用道具 举报

发表于 2021-3-18 10:52:01 | 显示全部楼层


   
come_on_sn 发表于 2021-3-15 23:04
您好,我写了下面的module,但是一直提示else附近有error,能麻烦帮忙看下吗?谢谢了

module add3(val,A, ...


if()begin
多语句
end
else begin
多语句
end
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-22 22:23 , Processed in 0.024228 second(s), 4 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表