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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3484|回复: 8

[求助] register

[复制链接]
发表于 2017-3-28 21:17:11 | 显示全部楼层 |阅读模式

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

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

x
input[1:0] in
output [n:0] out
reg [n:0]out_reg
input we,rd,clk

always@(posedge clk)
       if(we)
       output_reg<=in;
       if(rd)
      out<=out_reg;
end

输入一个2bit的input存到nbit的out_reg
但是我要把所有输入放在reg里面
例如第一个周期输入01>>>out_reg变成01
       第二个周期输入11>>>out_reg变成0111
以此类推
请问我该怎么改这个代码
发表于 2017-3-29 09:04:18 | 显示全部楼层
out <= {out[n:2],in};
 楼主| 发表于 2017-3-29 10:42:57 | 显示全部楼层
回复 2# lianlong


   能写详细点吗 ...这段要放哪个位置呢
发表于 2017-3-29 15:00:11 | 显示全部楼层
回复 3# as0920


    就放到你we分支下面,然后rd你要做每次读取out_reg[0:1]出去,out_reg <= {out_reg[2:n],00}这个操作逐渐把out_reg清空,是这样吗?
 楼主| 发表于 2017-3-30 10:56:39 | 显示全部楼层
回复 4# gaurson


   不是这样的 我要每次传2bit的input给out_reg传n次假设第一次传01 out_reg先存了01
第二次传11这时候out_reg变成0111
传很多次之后rd变成1再把out_reg里的值全部一次丢出去


这是我的代码
但是他失败了 我第一次传01它的out_reg变成0101
第二次传11 out_reg变成1111


module regef(out, in, we,rd, clk);

  parameter m=4  ;

  input [1:0] in;
  input we,rd;
  input clk;
  output [m-1:0] out;
  reg [m-1:0] out;
  reg [m-1:0] out_reg;

  generate
  genvar i;
  for(i=0;i<2;i=i+1) begin: out_regen
  always @(posedge clk)

    begin

      if (we)  
        out_reg[2*i+1 -: 2]<= in;
      if(rd)
        out<=out_reg;
    end
    end
    endgenerate
endmodule
发表于 2017-3-30 11:25:22 | 显示全部楼层
input[1:0] in
output [n:0] out
reg [n:0]out_reg
input we,rd,clk

always@(posedge clk)
       if(we)
       output_reg<={(output_reg<<2),in};
       if(rd)
      out<=out_reg;
end
 楼主| 发表于 2017-3-30 11:39:46 | 显示全部楼层
回复 6# 丧尸暴龙兽


   依然失败

波形

波形
发表于 2017-3-30 14:31:49 | 显示全部楼层
回复 7# as0920


    试试2楼的代码放到if(we)下,并且把we和rd两个条件的进程分开来写。有条件的话,最好加上复位条件。

    if(!reset)
         初始化out_reg
    elsif (we)
         out_reg <= {out_reg[n:2],in};

    if(!reset)
        初始化out
    elsif(rd)
        out <= out_reg;

always的写法省略了。
发表于 2017-3-30 15:36:59 | 显示全部楼层
回复 7# as0920


    不好意思,写错了,
    output_reg<={(output_reg<<2),in};改为 output_reg<=(output_reg<<2)+in;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-5 23:21 , Processed in 0.028309 second(s), 8 queries , Gzip On, Redis On.

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