sorting - 如何修复 quartus 中 Verilog HDL 的长时间编译
问题描述
我一直在尝试使用 Verilog HDL 创建计数排序算法,但是当我尝试编译它的这个迭代时,Quartus 开始编译它很长时间。我不知道是什么问题。
module sort(reset, clk, data_in0,data_in1,data_in2,data_in3,data_in4,data_in5,data_in6,data_in7,data_in8,data_in9, data_out0, data_out1, data_out2, data_out3, data_out4, data_out5, data_out6, data_out7, data_out8, data_out9);
input wire reset, clk;
input wire [1:0] data_in0;
input wire [1:0] data_in1;
input wire [1:0] data_in2;
input wire [1:0] data_in3;
input wire [1:0] data_in4;
input wire [1:0] data_in5;
input wire [1:0] data_in6;
input wire [1:0] data_in7;
input wire [1:0] data_in8;
input wire [1:0] data_in9;
output reg [1:0] data_out0;
output reg [1:0] data_out1;
output reg [1:0] data_out2;
output reg [1:0] data_out3;
output reg [1:0] data_out4;
output reg [1:0] data_out5;
output reg [1:0] data_out6;
output reg [1:0] data_out7;
output reg [1:0] data_out8;
output reg [1:0] data_out9;
reg [1:0] mem [9:0];
reg[9:0] buff [3:0];
integer i,k,j,f,s;
always@ (posedge clk)
begin
for(i=0; i<4; i=i+1)
buff[i]<=0;
if (reset == 1) begin
for (i = 0; i < 10; i = i + 1) mem[i]<=0;
s=0;
f=0;
end
else begin
if (f==0)begin
mem [0] <= data_in0;
mem[1]<=data_in1;
mem[2]<=data_in2;
mem[3]<=data_in3;
mem[4]<=data_in4;
mem[5]<=data_in5;
mem[6]<=data_in6;
mem[7]<=data_in7;
mem[8]<=data_in8;
mem[9]<=data_in9;
f=1;
end
for( i = 0; i <10 ; i=i+1)
begin
buff[mem[i]]<=buff[mem[i]]+1;
end
if(s==0) begin
k<=0;
for( i = 0; i <4 ; i=i+1)
begin
for( j = 0; j < 10 ; j = j +1)
begin
if(j<buff[i])
begin
mem[k]<=i;
k<=k+1;
end
end
end
end s=1;
data_out0 = mem[0];
data_out1 = mem[1];
data_out2 = mem[2];
data_out3 = mem[3];
data_out4 = mem[4];
data_out5 = mem[5];
data_out6 = mem[6];
data_out7 = mem[7];
data_out8 = mem[8];
data_out9 = mem[9];
end
end
endmodule
通过分析和综合部分需要很长时间。我认为这是由于此代码中的错误或运算符的错误使用造成的,但我无法理解它的确切位置。
解决方案
Verilog 中的 for 循环不像您预期的那样工作。这不会逐步执行,但综合工具将尝试展开循环,并且由于所有内容都包含在 中always @(posedge clk)
,因此它将在单个时钟周期内执行所有展开的语句。使用状态机重新考虑您的模块以实现顺序性。
推荐阅读
- javascript - 使用 Express 路由错误请求呼叫时出现意外错误
- python - 在Python中将一长串位作为半字节转换为十进制
- python-3.x - 名称“模型”未定义 Keras
- google-apps-script - 发送带有附加电子表格的电子邮件
- python - Python 2.7 (urllib2)。如何使用 SSL HTTPS 代理?
- reactjs - React-如何防止登录后返回登录页面?
- java - 如何在JAVA中解决SQL“'字段列表'中的未知列'c'”,而实际上没有语法问题
- swift - iOS 应用程序 - 收到推送通知时在屏幕上显示自定义交互视图,如系统警报
- javascript - 获取JS中两个小时之间的时间范围有多少时间
- java - 如何跳过访问(重复)值的索引?