verilog Error:can't elaborate top-level user hierarchy???
reg [ 25:0 ] count_del ;always @ ( posedge clk or negedge rst_n )
if(!rst_n || key_out) //其中key_out为检测的按键输入下降沿,检测到时为1,否则为0
count_del<=26'h0000000 ;
else if(count_del==26'd50000001)
count_del <= 26'h0000000 ;
else count_del <= count_del+1 ;
分析综合时,就出错: Error:can't elaborate top-level user hierarchy
而写成:
reg [ 25:0 ] count_del ;
always @ ( posedge clk or negedge rst_n )
if(!rst_n )
count_del<=26'h0000000 ;
else if ( key_out )
count_del<=26'h0000000 ;
else if(count_del==26'd50000001)
count_del <= 26'h0000000 ;
else count_del <= count_del+1 ;
就没有错了,这是为什么? 管脚是否有重复定义? always @ ( posedge clk or negedge rst_n )
因为这里边的negedge rst_n的问题导致的吧?你第一个算法里,同时检测两个信号的状态,可能会导致发生错误吧 (!rst_n || key_out)这个写法放在复位里是不可以的,虽然有的综合器可以综合,但是绝大多数都是不工作的!你自己说说!rst_n是什么东西,key_out是什么东西,你再把它们两个条件或是什么意思?而且你的符号也用错了,硬件的取反不是用!,而是用~,前者是算术取反,后者是逻辑取反。硬件不需要逻辑或,直接或就够了,逻辑或反而要多占用资源!写硬件不是写软件,别一切按着软件的格式写!
再说了,就看你这两句:
always @ ( posedge clk or negedge rst_n )
if(!rst_n || key_out) //其中key_out为检测的按键输入下降沿,检测到时为1,否则为0
你自己还不知道什么地方错了?你的条件列表中有key_out吗?你的 rst_n是下降沿有效,而key_out是上升沿有效,那我给你个任务,我给你一个FDCE,然后你用线把这两个东西给我连起来,OK?你能连起来而不用其它东西,那你是神了。 wye11083 发表于 2012-4-20 13:23 static/image/common/back.gif
(!rst_n || key_out)这个写法放在复位里是不可以的,虽然有的综合器可以综合,但是绝大多数都是不工作的 ...
谢谢指点,感觉写硬件上很多思维没有转换过来,verilog写的时候,遇到了很多问题和错误,可能还是理解不透侧
页:
[1]