高级会员
- 积分
- 810
- 金钱
- 810
- 注册时间
- 2014-5-30
- 在线时间
- 93 小时
|
1金钱
例程源码如下:
[mw_shl_code=c,true]module flow_led(
input sys_clk , //系统时钟
input sys_rst_n, //系统复位,低电平有效
output reg [3:0] led //4个LED灯
);
//reg define
reg [23:0] counter;
//*****************************************************
//** main code
//*****************************************************
//计数器对系统时钟计数,计时0.2秒
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
counter <= 24'd0;
else if (counter < 24'd10)
counter <= counter + 1'b1;
else
counter <= 24'd0;
end
//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
led <= 4'b0001;
else if(counter == 24'd10)
led[3:0] <= {led[2:0],led[3]};
else
led <= led;
end
endmodule[/mw_shl_code]
如题,菜鸟请教几个若若的问题:
1、flow_led例程中counter <= counter + 1'b1;可以改成counter <= counter + 24'b1;吗?哪个更好或者说哪个对?
2、led为什么要定义成reg类型呢?定义成wire类型可以吗?如果定义成wire型,如何实现流水灯程序呢?
3、如何比较多种写法实现某一个逻辑(如:counter <= counter + 1'b1;改成counter <= counter + 24'b1;)后的网表文件是否一样呢?即生成的硬件是一样的呢?比如单片机中可以直接比较bin文件而保证程序是否一样,Quartus软件生成的代码可以直接比较jic或pof文件来达到要求吗?
谢谢啦
|
最佳答案
查看完整内容[请看2#楼]
1、这两种写法都可以,写成第二种写法麻烦些,好处是可以清晰的看到位宽;
2、定义成reg这是由语法决定的,告诉你个简单的方法,凡是在always语句里赋值的,定义成reg,其它是wire;3、你可以综合后查看资源报告,观察逻辑资源的占用情况。
|