学fpga(先自顶而下设计,再自下而上集成)

学fpga(先自顶而下设计,再自下而上集成),第1张

【 声明:版权所有,欢迎转载,请勿用于商业用途。


联系信箱:feixiaoxing @163.com】

        前面讨论一下led流水灯的显示、按键的触发这两个模块。


等真正做一个项目的时候,应该怎么处理呢?一般先按照自顶而下的方法进行需求切分,然后把每一个子模块做好了之后,再进自下而上的集成处理。


        考虑到之前讨论的流水灯和按键,可以假设有这么一个需求。


当按键按下的时候,流水灯开始运行。


当按键再次按下的时候,流水灯结束。


等第三次按键按下的时候,流水灯再次开始循环。


        初次拿到这个需求的时候,第一步要做的就是确认功能和输入、输出。


         等完成了第一步之后,下面要做的就是进行模块切分。


模块切分需要依赖于自己的经验。


这个有点类似于做数学题。


一开始拿到的题目总是很难的,我们要做得就是把这个问题变成一个一个学过得知识点,这些知识点就是过去积累的经验。


因为我们学过led流水灯这些,所以很自然地拆分成两个模块。


         有了这一步模块得拆分之后,当然后面就是key模块、led模块的实现了。


等到实现之后,需要对key模块、led模块进行分别测试,测试之后就可以开始自底向上的整合了。


verilog上面,就是把各个模块进行例化,拼凑在一起,比如像这样,


module input_led(clk, rst, key, led)

input clk;
input rst;
input key;
output led;

wire clk;
wire rst;
wire key;
reg[3:0] led;

wire flag;

key_module key_module(
	.clk(clk),
	.rst(rst),
	.key(key),
	.flag(flag)
	);

led_module led_module(
	.clk(clk),
	.rst(rst),
	.flag(flag),
	.led(led)
	);

endmodule;

        关于这部分,其实和c语言里面的main函数很相。


同样是这一个需求,大家可以思考一下,是不是也是这么一个流程。


先进行模块拆分,每一个模块用不同的函数完成,等模块测试之后,再进行模块集成整合,等到确认没有问题了,就可以说功能开发成功了。


void input_module()
{
	return;
}

void led_module()
{
	return;
}

int main()
{
    while(1)
    {
    	input_module();
	    led_module();
    }

	return 0;
}

        在运行机理上面,fpga和c编程可能差别蛮大。


但是开发流程上面,两者有很大的相似性。


有c语言编程经验的同学,完全可以把这个经验方便地移植到fpga开发上面,相信会有很多意外的收获。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/578083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存