新闻  |   论坛  |   博客  |   在线研讨会
第一次使用Genesys
502593045 | 2012-06-28 22:35:10    阅读:9996   发布文章


     第一次做软件一般都是从“hello world”开始的。第一次做硬件一般都是从LED开始的。先做个跑马灯,熟悉一下板子和xilinx芯片以及ISE软件的使用方法。
      真是悲剧~写个跑马灯,我都感觉verilog HDL编程生疏了,出现了不少问题,在此记下,希望以后不要再范了。不过,就拿如何写testbench来说,我是会了忘忘了学学了又不会了。这次又复习了一遍。真的希望以后可以将自己的知识和技能的基础打牢固。不要再有那么多琐碎和烦心的事情。


第一个程序的错误:

1、  posedge clk and negedge rst_n应该写为posedge clk or negedge rst_n

2、posedge clk or nedge rst_n应该写为posedge clk or negedge rst_n

3、

module LED8(

       input  clk_100M;

       input  rst_n;

    output [0:7] LED

    );

 

应该定义为:

module LED8(

       input  clk_100M,

       input  rst_n,

    output [0:7] LED

    );

将端口定义包括类型定义一起放在module后的括号内的时候,之间用逗号隔开。

 

4、数组假设abc[0:7],单个元素写成abc[0]而不是abc(0)。

5、100MHz分频成1Hz。计数为1042*1024*100(27'h640_0000)。

6、两种方式定义信号端口
第一种:

module LED8(clk_100M,rst_n,LED);

       input  clk_100M;

       input  rst_n;

    output [0:7] LED;

       reg [0:7] LED;

       reg [0:7] choose;           //Choose the LED to highlight

       reg [0:26] count;   

没错误。

 第二种:

module LED8(

       input  clk_100M,

       input  rst_n,

    output [0:7] LED

    );

       reg [0:7] LED;

       reg [0:7] choose;           //Choose the LED to highlight

       reg [0:26] count;   

提示错误:

ISE软件是:ERROR:HDLCompilers:27 - "LED8.v" line 34 Illegal redeclaration of 'LED'

Quartus软件是:Error (10759): Verilog HDL error at LED8.v(34): object LED declared in a list of port declarations cannot be redeclared within the module body。

都是说重复定义LED信号。
所以,采用第二种的时候,不能再将输出端口定义为reg型。另外,代码中使用assign对LED赋值会提示如下错误:
ERROR:HDLCompilers:247 - "LED8.v" line 60 Reference to vector wire 'led' is not a legal reg or variable lvalue
ERROR:HDLCompilers:106 - "LED8.v" line 60 Illegal left hand side of nonblocking assignment
解决办法:必须添加中间变量如 reg [0:7] abc;使用assign LED = abc;对LED赋值。

小结:第一种定义方法,输出变量若使用assign进行赋值就不能定义为reg型,且需要使用中间变量;若在always中进行赋值就需要定义为reg型;
第二种方法,默认的是wire型,故不能在always中赋值,必须由中间变量用assign赋值。

7、本来写了个testbench,才发现要想实现LED变化一次,count要计数
1042*1024*100(27'h640_0000)。这么大数据很难看到现象。因为板子的输入时钟就是100M,于是就想通过DCM得到低于10M的数据吧。跳出如下对话框:

即,最小的输出频率是32M。这跟不分频没多大区别了。好吧,我承认,这么高级的板子做跑马灯有些大材小用了。╮(╯▽╰)╭

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
halibote523  2012-07-04 10:52:23 

世界上第一个程序:helloworld!

肖盼  2012-07-02 15:54:44 

非常好

虾虽在江湖,江湖却没有关于虾的传说!
推荐文章
最近访客