赞
踩
http://www.eefocus.com/book/08-01/328541276058786.html
一、背景简介
早期的FPGA由于其资源很少,只能实现简单逻辑,所以其在板级系统中所起的作用只是简单的“粘贴逻辑”, 连接CPU与外设,以取代的传统的琐碎的专用集成芯片(ASIC)。
小灯显示数字“F0”,实验成功!
编写RAM的注意事项:
之前写的RAM中存在BUG,主要是双向端口带来的麻烦,需要三态门。而之前三态门的关闭时刻采用的RD信号的上升沿,因为CPU有可能是在此刻锁存数据的,所以此时关闭三态门可能导致CPU读到的数据是“ZZ”而不是“F0”。后来该成CS信号的上升沿才关闭三态门,这样才能保证数据被可靠读入CPU。
这种改变需要用状态机来实现。因为三态门的开、关是由RD的下降沿和CS的上升沿同时控制的,而边沿敏感列表只能有一个变量,两个always块又不能给同一个变量赋值,必须写在同一个always块中,那么RD和CS信号就必须为电平敏感信号了,但在每次读RAM时,是先置低CS,然后置低RD,然后拉高RD,然后再拉高CS,在前后都有RD高、CS低的情况,而这两种情况是不同的状态,因此需要状态机来实现。
并且由于前面的分析,在RD信号的下降沿锁存了地址对应的数据,然后就能正常使用了。
RAM结构见下图:
点击此处,下载全图
3、简单的动态效果
毕竟是CPU,只做出静态的效果显得有些不像CPU,即使RAM不能用,也可以通过累加器实现简单的动态效果,即累加器加1,然后输出到端口,再加1,再输出到端口,如此往复循环。考虑到视觉的可观察性,在CPU时钟前面加上了16位的计数器作为分频器。
程序代码如下:
assign regfile[0] = 8'h87;
assign regfile[1] = 8'h00;
assign regfile[2] = 8'h01;
assign regfile[3] = 8'h68;
assign regfile[4] = 8'h00;
assign regfile[5] = 8'h01;
assign regfile[6] = 8'h07;
assign regfile[7] = 8'h01;
assign regfile[8] = 8'hc8;
assign regfile[9] = 8'h03;
assign regfile[10] = 8'h00;
上面程序是在RAM调试未成功时写的。在RAM调试成功之后,可以写一些比较复杂的程序了,但需要控制转移语句。尝试了CMPACC、LDACC、STACC等语句再次遭到失败,时间关系就不探索了。最后写了一个跑马灯程序,没用到条件转移语句,仅仅用到LDI、SHLACC、STM、JMP语句。代码如下:
assign regfile[0] = 8'h87;
assign regfile[1] = 8'h01;
assign regfile[2] = 8'h01;
assign regfile[3] = 8'h68;
assign regfile[4] = 8'h00;
assign regfile[5] = 8'h01;
assign regfile[6] = 8'h38;
assign regfile[7] = 8'h68;
assign regfile[8] = 8'h00;
assign regfile[9] = 8'h01;
assign regfile[10] = 8'h38;
assign regfile[11] = 8'h68;
assign regfile[12] = 8'h00;
assign regfile[13] = 8'h01;
assign regfile[14] = 8'h38;
assign regfile[15] = 8'h68;
assign regfile[16] = 8'h00;
assign regfile[17] = 8'h01;
assign regfile[18] = 8'h38;
assign regfile[19] = 8'h68;
assign regfile[20] = 8'h00;
assign regfile[21] = 8'h01;
assign regfile[22] = 8'h38;
assign regfile[23] = 8'h68;
assign regfile[24] = 8'h00;
assign regfile[25] = 8'h01;
assign regfile[26] = 8'h38;
assign regfile[27] = 8'h68;
assign regfile[28] = 8'h00;
assign regfile[29] = 8'h01;
assign regfile[30] = 8'h38;
assign regfile[31] = 8'h68;
assign regfile[32] = 8'h00;
assign regfile[33] = 8'h01;
assign regfile[34] = 8'hc8;
assign regfile[35] = 8'h00;
assign regfile[36] = 8'h00;
实验结果见归还的16号开发板。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。