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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] verilog对寄存器组写操作出现问题

[复制链接]
发表于 2015-5-4 11:09:19 | 显示全部楼层 |阅读模式

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

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

x
reg [7:0] mem[63:0] //64个寄存器构成寄存器组,里面包含了2个异步FIFO下面我对这个寄存器组进行写操作
例如
always @(negedge resetn or posedge tx_wclk) //这是对TX_FIFO所对应的寄存器组进行写操作
    begin
        if(!resetn)
        begin
            for(i=0;i<63;i=i+1)
            mem <= 8'b0;
        end
        else if(tx_wreq && !tx_wfull)
        mem[tx_waddr] <= tx_wdata;
    end

always @(posedge rx_wclk or negedge resetn) //这是对RX_FIFO所对应的寄存器组进行写操作
    begin
        if(!resetn)
        begin
            for(i=0;i<63;i=i+1)
            mem <= 8'b0;
        end
        else if(rx_wreq&&!rx_wfull)
        mem[rx_waddr] <= rx_wdata;
    end


这里我能确保tx_waddr和rx_waddr不会指向相同的地址单元,但编译时显示对mem多驱动赋值,我想把这两块合成一块来避免这个错误,但试了很多都无法解决,因为TX_FIFO和RX_FIFO是两个独立的模块,tx_clk和rx_clk可能同时跳变,即可能同时对2个FIFO进行写操作,这里不知道该怎么办了,求助~~
发表于 2015-5-4 22:35:17 | 显示全部楼层
你这里逻辑错误,不是合并模块能解决的, rx_fifo和tx_fifo公用同一个mem 肯定不对,一个fifo包含一个写口一个读口,不可能两个写口,两个写口那是ram, ram同时写要有优先权的逻辑的
 楼主| 发表于 2015-5-5 11:12:24 | 显示全部楼层
回复 2# goswami

我这里的想法是先创建一个寄存器组,比如说深度64的,我自己通过外部配置,想要把0~28作为RX_FIFO,29~63作为TX_FIFO(打个比方),也就是说我的RX_FIFO的写指针和读指针只会在0~28间变化,而TX_FIFO的读写指针只会在29~63间变化,这样看上去就是2个FIFO了,感觉应该不会存在所说的一个FIFO两个读写口的问题,请教如何解决?
发表于 2015-5-5 13:19:32 | 显示全部楼层
回复 3# czy619730


  你这样纯粹是多此一举,分成两个不久完了么,根本没有共用的资源何必纠缠在一起呢?
发表于 2015-5-5 13:58:33 | 显示全部楼层
这纯粹是Verilog可综合性的问题,与你的本意无关
建议楼主加强基础知识的学习
 楼主| 发表于 2015-5-5 14:37:01 | 显示全部楼层
回复 4# goswami

我的目的是为了实现这个表所示的功能,通过对spi_thr(SPI端口)的编写来动态改变RX_FIFO和TX_FIFO的深度,因为这两个FIFO是需要做成ASIC的,所以不能做成固定的2个FIFO,就想通过分别对这2个FIFO的读写指针的范围进行控制来实现,就是这里想不明白,请前辈看下
   
  

Spi_thr

  
  

RX

  
  

TX

  
  

0000

  
  

4

  
  

60

  
  

0001

  
  

8

  
  

56

  
  

0010

  
  

12

  
  

52

  
  

0011

  
  

16

  
  

48

  
  

0100

  
  

20

  
  

44

  
  

0101

  
  

24

  
  

40

  
  

0110

  
  

28

  
  

36

  
  

0111

  
  

32

  
  

32

  
  

1000

  
  

36

  
  

28

  
  

1001

  
  

40

  
  

24

  
  

1010

  
  

44

  
  

20

  
  

1011

  
  

48

  
  

16

  
  

1100

  
  

52

  
  

12

  
  

1101

  
  

56

  
  

8

  
  

1110

  
  

60

  
  

4

  
  

1111

  
  

64

  
  

0

  
发表于 2015-5-5 15:18:25 | 显示全部楼层
你这样的要求可以实现,就是通过spi_thr配置寄存器来选择时钟,读写地址范围,读写地址来源和寄存器组数据流向,就是这个思路。实现起来有些得不偿失
发表于 2015-5-5 20:22:31 | 显示全部楼层
把数据,地址和时钟信息集合做成两组输入,根据req信号选择使用哪组数据,包括时钟信号。时钟信号可以用一个时钟选择器资源来实现
发表于 2015-5-5 22:52:15 | 显示全部楼层
顶起学习中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 03:58 , Processed in 0.020712 second(s), 9 queries , Gzip On, Redis On.

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