关于verilog中gerenate for的疑问
时间:10-02
整理:3721RD
点击:
请教各位大神,如果使用gerenate for语句,for的循环次数不是固定的,而是一个输入变量,这种情况可以综合吗?
assign pK = g_din[0][95:88];
generate
genvar i;
if((match_en == 1) &&(gauss_hit != 0)) begin
for(i = 0; i < pK; i = i + 1) begin
if(i == gauss_hit) begin
assign diff_mu_r = (img_din[24:16] > g_din[i][87:80])?(img_din[24:16] - g_din[i][87:80])g_din[i][87:80]-img_din[24:16]);
assign diff_mu_g = (img_din[15:8] > g_din[i][79:72])?(img_din[15:8] - g_din[i][79:72])g_din[i][79:72]-img_din[15:8]);
assign diff_mu_b = (img_din[7:0] > g_din[i][71:64])?(img_din[7:0] - g_din[i][71:64])g_din[i][71:64]-img_din[7:0]);
always@(posedge clk) begin
...
assign pK = g_din[0][95:88];
generate
genvar i;
if((match_en == 1) &&(gauss_hit != 0)) begin
for(i = 0; i < pK; i = i + 1) begin
if(i == gauss_hit) begin
assign diff_mu_r = (img_din[24:16] > g_din[i][87:80])?(img_din[24:16] - g_din[i][87:80])g_din[i][87:80]-img_din[24:16]);
assign diff_mu_g = (img_din[15:8] > g_din[i][79:72])?(img_din[15:8] - g_din[i][79:72])g_din[i][79:72]-img_din[15:8]);
assign diff_mu_b = (img_din[7:0] > g_din[i][71:64])?(img_din[7:0] - g_din[i][71:64])g_din[i][71:64]-img_din[7:0]);
always@(posedge clk) begin
...
用的vavido
只要是综合时可以确定的值都可以。例如,parameter 定义的。
是由外部引脚输入的,这里是ddr中数据的某几位来确定,这些数据是迭代更新的,这样是不是就不能综合了,那需要嵌套case语句吗?
generate
if() begin
case()
2'b00:
for() begin:
...
2'b01:
for() begin:
...
...
这样嵌套使用可以吗
是由外部引脚输入的肯定不行,你想象力太丰富了。循环生成语句只不过是在综合时把gerenate for和endgerenate之间的语句展开了。
至于语法你可以看相关资料。
感谢,以前没怎么用过generate,那在generate和for之间插入if 和case语句 应该没问题吧,就是说for语句嵌套在case里面.
