在布局布线那一步时
有时候会没有出现我需要的管脚,比如说我定义了
input clk;
out[7:0] seg;
但在管脚编号的时候,只出现seg【0】-seg【7】,没有了 clk 的这一项,
请问各位有没有遇到类似的问题啊,
应该如何解决??
源程序在6楼
[ 本帖最后由 jas0n 于 2010-3-10 16:45 编辑 ]
不太可能啊
你把你的工程文件贴出来我看看,我搞了一年多actel
ide不会出现这种错误,是你的代码的错误。 我曾经碰到过,是因为在综合时这个引脚没有用而被优化掉了。去看看综合后的原理图,看这个脚是不是已经不在了。
另外一定要看编译结果,会告诉你是不是因为没有用而被优化掉
回复 板凳 wangkj 的帖子
// seg.v
module seg(wei,seg,clk_48M);
output wei;
output[7:0] seg;
input clk_48M;
reg[7:0] seg;
reg[25:0] count;
reg[5:0] flag;
reg wei;
always@(posedge clk_48M)
wei<=0;
always@(posedge clk_48M)
begin
count<=count+1;
begin
if(count==26'b10_1101_1100_0110_1100_0000_0000)
begin
flag<=flag+1;
case(flag)
0: seg<=8'b11000000; //0
1: seg<=8'b11111001; //1
2: seg<=8'b10100100; //2
3: seg<=8'b10110000; //3
4: seg<=8'b10011001; //4
5: seg<=8'b10010010; //5
6: seg<=8'b10000010; //6
7: seg<=8'b11111000; //7
8: seg<=8'b10001000; //8
9: seg<=8'b10010000; //9
10: seg<=8'b10001000; //a
11: seg<=8'b10000011; //b
12: seg<=8'b11000110; //c
13: seg<=8'b10100001; //d
14: seg<=8'b10000110; //e
15: seg<=8'b10001110; //f
default: begin
flag<=0;
seg<=8'b11000000;
end
endcase
end
else seg<=seg;
end
end
endmodule
补充一下
当有那条flag<=flag+1;的指令时,编管脚的时候,clk出来了
但没有那条指令的时候,又出现那种没有clk的情况了,这是为什么呢?
就算我没输入flag那条指令,我count的那些也必须依靠clk来执行啊,没可能把clk优化掉吧?
[ 本帖最后由 jas0n 于 2010-3-10 17:00 编辑 ]
回复 5楼 wonderglass 的帖子
在哪看,是综合里面那个.srr的文件吗?
我没有把你的代码实际编译,但是估计你也找到问题所在了。 没有flag<=flag+1这条语句, case结构就没有意义,所以有可能先把你的整个case结构给优化掉。没有了case语句, if语句又变得没有意义,所以if语句有可能也被优化掉。
此外你的代码中还有个不好的习惯,这种时序电路最好要有个reset引脚,给flag, count开机时一个明确的初值。
回复 8楼 wonderglass 的帖子
感谢wonderglass,基本上知道了软件优化代码的方式了
嗯嗯,谢谢你的提醒,我刚学习fpga,觉得用reset比较麻烦,就省掉了
顺便问句,我有个流水灯的程序,也是省掉了reset,但是每次上电的初始状态都是2、3盏灯同亮,然后流了几下后才真正实现流水灯的状态,不知道是不是省掉reset的恶果?
回复 9楼 jas0n 的帖子
我估计是。 想想看在数电设计中,寄存器如果没有初始复位,初始态将是随机, 那么开机时就不一定会落在你的循环体内,如果你的代码写的好的话,经过几个周期能自动回到正确的循环体。