我想在Verilog中創建一個數組,它將包含給定函數的值x
,y
。因此,陣列的每個內容將包含值x
和值y
。因此,可以說,我有(x,y)
可合成的XY值陣列
(3,2)
(5,10)
(1,5)
最後陣列下面的值會是這個樣子:
Table[i][x][y]
Table[0][3][2]
Table[1][5][10]
Table[2][1][5]
是否有可能使這個陣列中的Verilog和可合成可?如果是這樣,我怎樣才能訪問這個數組上的每個點?
我想在Verilog中創建一個數組,它將包含給定函數的值x
,y
。因此,陣列的每個內容將包含值x
和值y
。因此,可以說,我有(x,y)
可合成的XY值陣列
(3,2)
(5,10)
(1,5)
最後陣列下面的值會是這個樣子:
Table[i][x][y]
Table[0][3][2]
Table[1][5][10]
Table[2][1][5]
是否有可能使這個陣列中的Verilog和可合成可?如果是這樣,我怎樣才能訪問這個數組上的每個點?
我想你想得到的是一個元素可以容納兩個數字的數組。他們表現出來的方式很奇怪。你用你的示例代碼說的是,你有一個三維數組,其中一些元素的值爲i
,x
和y
,將會有一個值,但是你沒有指定什麼值。
你在文中說的是你想要一個i
元素表,其中每個元素將有兩個值:一個表示x
,另一個表示y
。這是我們可以解決的問題,但不能與您提供的實現(三維數組)一起使用。
也就是說,您必須首先考慮您要在表格中存儲的x
,y
值的性質。 Verilog最適合整數,所以我會假設這一點。您還需要知道您的整數將使用多少位。假設他們將使用8位,所以有效的x
,y
值在[-128,+127]
範圍內被認爲是符號。
現在您必須知道要在表格中存儲多少個x
,y
對。假設它的值爲N
,其中N
是模塊的某種參數。
然後,該表將被實例是這樣的:
reg [15:0] Table[0..N-1];
所以,Table[i][7:0]
可以容納一個8位的值,例如,y
,並且Table[i][15:8]
可容納另一個8位值,說x
。
初始化該表,在綜合的方式,最常用的方法是復位信號添加到您的模塊,並使用它來初始化表的內容,如:
reg [15:0] Table[0..N-1];
integer i;
always @(posedge clk) begin
if (reset == 1'b1) begin
Table[0] <= {8'd3, 8'd2};
Table[1] <= {8'd5, 8'd10};
Table[2] <= {8'd1, 8'd5};
for (i=3;i<N;i=i+1) // initialize the rest of Table to 0,0
Table[i] <= {8'd0, 8'd0};
end
else ......
end
要在訪問點位置i
,只需使用:
Table[i][15:8] for X value
Table[i][7:0] for Y value
如果靶向Xilinx的設備,還可以初始化一個寄存器的內容,無論是在分佈式RAM或塊RAM,使用initial
塊
reg [15:0] Table[0..N-1];
integer i;
initial begin
Table[0] = {8'd3, 8'd2};
Table[1] = {8'd5, 8'd10};
Table[2] = {8'd1, 8'd5};
for (i=3;i<N;i=i+1) // initialize the rest of Table to 0,0
Table[i] = {8'd0, 8'd0};
end
然後,你可以標記這個答案爲正確的:) –
好吧,這似乎工作。你能用上面的代碼來幫助我嗎?它編譯,但它不合成任何東西。我想比較一個輸入與這個數組的x值。如果該值大於特定的x,我想保存這個x的索引,並使用具有相同索引的y執行加法。結果進入輸出。 – ctzof
模塊memc(inp,outp); input [2:0] inp; 輸出[2:0]輸出; wire [2:0] index2; reg [2:0] index; reg [5:0] mem [2:0]; 初始開始 mem [0] = 6'b000000; mem [1] = 6'b001001; mem [2] = 6'b010010; 端 總是@(*) 開始 如果(INP> MEM [0] [2:0]) 索引= 0; else if(inp> mem [0] [2:0]) index = 1; else if(inp> mem [0] [2:0]) index = 2; else index = 0; end assign outp = mem [index] [2:0] + mem [index] [5:3]; endmodule – ctzof