你的设计被综合掉的原因是你没有在你的模块中描述任何逻辑。
您设计中的唯一模块是一个initial
通常不用于综合的模块,除非在有限的情况下;该结构主要用于模拟中的测试平台(通过 ModelSim 或其他模拟器运行 Verilog)。
您想要的是使用always
块或assign
语句来描述 XST 的逻辑,以合成为 FPGA 进行仿真的网表。由于您提供的模块没有这些结构,因此无法生成网表,因此没有合成!
在您的情况下,尚不完全清楚您要描述的模块结果的逻辑将始终out
等于 31。如果要out
在值 0 到 31 之间循环,则需要添加一些顺序逻辑实施。在网上搜索一些关于数字设计的教程,这样你就掌握了基础知识(组合逻辑、门、寄存器等)。然后,考虑您希望设计做什么并将其映射到这些组件。然后,编写描述该设计的 Verilog。
根据评论进行编辑:
报告中没有使用 LUT/FF 的原因是 FPGA 不需要使用任何资源(或不需要这些资源)来实现您的模块。由于out
绑定到常数 31,它的值始终为 1,因此 FPGA 只需绑定out
到 Vdd(注意out
不是 31,因为它只是一个 1 位寄存器)。其他数组值从不使用也不访问,因此 FPGA 将它们综合掉(即,不输出需要知道array[0][1]
as的值out
是一个常数,并且设计中不存在其他端口)。为了保留数组,您只需要使用它来以某种方式驱动一些输出。这是一个向您展示的基本示例:
module top( input [6:0] i_in, // Used to index the array like i
input [4:0] j_in, // Used to index the array like j
output reg [5:0] out // Note, out is now big enough to store all the bits in array
);
integer i;
integer j;
reg [5:0] array[0:99][0:31];
always @(*) begin
// Set up the array, not necessarily optimal, but it works
for (i = 0; i < 100; i = i + 1) begin
for (j = 0; j < 32; j = j + 1) begin
array[i][j] = j;
end
end
// Assign the output to value in the array at position i_in, j_in
out = array[i_in][j_in];
end
endmodule
如果您将输入i_in
和j_in
开关或其他东西连接out
到 6 个 LED,您应该能够使用开关对阵列进行索引并获得 LED 上的输出以确认您的设计。