求解一个verilog问题
时间:12-12
整理:3721RD
点击:
目前有这样一个需求:
输入信号sig_i的宽度使用`define BUS_LEN
BUS_LEN是一个1-15的值
要求内部有一个最大16位的可读写寄存器sfr,
寄存器的位数与BUS_LEN的宽度相同
与sig_i每一位一一对应
相当于给sig_i每一位加一个屏蔽信号.
请问这个寄存器怎么写比较好啊?
主要的问题是,因为BUS_LEN不定,所以在read该寄存器的时候,
上位拼接多少个0不定(read_data的宽度是16位的定值,所以寄存器没有的bit需要高位拼0凑够16位再输出)
再一个就是write寄存器的时候,如果代码写成
sig_i <= 16'h0000;
那么当BUS_LEN<15的时候会不会有什么问题?
希望各位指点,谢谢
输入信号sig_i的宽度使用`define BUS_LEN
BUS_LEN是一个1-15的值
要求内部有一个最大16位的可读写寄存器sfr,
寄存器的位数与BUS_LEN的宽度相同
与sig_i每一位一一对应
相当于给sig_i每一位加一个屏蔽信号.
请问这个寄存器怎么写比较好啊?
主要的问题是,因为BUS_LEN不定,所以在read该寄存器的时候,
上位拼接多少个0不定(read_data的宽度是16位的定值,所以寄存器没有的bit需要高位拼0凑够16位再输出)
再一个就是write寄存器的时候,如果代码写成
sig_i <= 16'h0000;
那么当BUS_LEN<15的时候会不会有什么问题?
希望各位指点,谢谢
从输入的角度说确实没有用到,
但是从寄存器读写的角度说,
这个寄存器被设定成RW权限的了
这个也可以被优化掉么?
直接拼也行吧
比如{{(16-BUS_LEN}{1'b0}},{BUS_LEN{1'b0}}}
还有这个写法呢...头一次见,我试试,
如果编译能过的话应该就可以满足要求了
非常感谢