关于verilog二维数组处理,求打大神帮忙。

关于Verilog二维数组处理的问题,大神们,目前在做一个编程,将一个二维数组[像素]里头的值加权进行内插处理,即处理后原来的数组变大了,用Verilog怎么算才好,由于二维数组不能作为port,求救!!附件图:A、B、C、D、E等为整像素点。b、h、m、s、aa、bb、cc、dd为半像素点,半像素的计算如下(b为一个例子):b=round((E-5F+20G+20H-5I+J)/32) round为取整函数加权系数固定:(1,-5,20,20,-5,1)/32【除了大写字母其他都是新增加的】怎样思路才好?求大神帮忙!

用一维数组模拟就行

//int a[10][10] -->int a[100];
//a[i][j] ---->a[i*10+j];追问

之前也是这么想的。但是,这编程的下一步要在生成值的基础上再取平均。然后就晕了。比如:d=(G+h)/2或者e=(G+j)/2,这算法好晕啊!

追答

这个只要计算好就没有问题,没有办法只有这样,晕晕就好了!勉为其难吧!

追问

话说,再问一个verilog里头的二维数组【存储器】只能一行行赋值?有没有一个一个赋值的!比如我现在要取G这个点的值,然后给某个变量P。这要怎么写啊?谢谢哈!

追答

verilog可以一位一位的
赋值
吧!亦可以若干位一起赋值吧;还可以组合赋值吧!应该很灵活的;

追问

那要怎么书写啊?
reg [1:100]A[1:100];
integer P;
P=A[3][3];
貌似不对啊!

追答

reg [1:8] Ack, Dram [0:63];
. . .
Ack = Dram [60]; //
存储器的第
60
个单元。

不允许对存储器变量值部分选择或位选择。例如,

Dram [60] [2]
不允许。

Dram [60] [2:4]
也不允许。

在存储器中读取一个位或部分选择一个字的方法如下:将存储器单元赋值给寄存器变
量,然后对该寄存器变量采用部分选择或位选择操作。例如,
Ack [2]

Ack [2:4]
是合法的
表达式。

不允许对存储器变量值部分选择或位选择。例如,

Dram [60] [2]
不允许。

Dram [60] [2:4]
也不允许。

在存储器中读取一个位或部分选择一个字的方法如下:将存储器单元赋值给寄存器变
量,然后对该寄存器变量采用部分选择或位选择操作。例如,
Ack [2]

Ack [2:4]
是合法的
表达式。

追问

谢谢回答哈!要处理的矩阵还是蛮大的。要1024X1024。处理之后矩阵还更大,慢慢受了。想知道还有没有其他方法?

追答

寄存器可以取任意大小欧

温馨提示:答案为网友推荐,仅供参考
相似回答