u@home:~$

  • reset的一个有意思的地方

    没找到是什么的原因,先看下这个简单的代码。 77 dffr_s #(1) busy_reg ( 78 .din (ar_enter & (~r_retire)), 79 .clk (aclk), 80 .rst (~resetn), 81 .q (busy), 82 .se(), .si(), .so()); ar_enter为1,r_retire为0时,输入为1,busy也就此为1。 图上黄框也是这样显示的,这个时候的reset复位结束变1的时候clk正好在上升沿。(感觉这种时候在实际电路上会让事情更复杂,因为reset和clk应该不会同步的很准。) 接下来是reset为1的时候正是clk的下降沿。 黄框中这个时候在上升沿ar_enter为1,r_retire为0,而busy得到的是x。虽然busy在下一个cycle有值了,但这时候ar_enter和r_retire全为0了,所以busy为0。 这样busy就错过了开始这个本该为1的cycle。 不知道是什么原因。 如果不用dffr_s,用不带reset的dff_s。 结果则是没问题的。 再试下reset到clk上升沿后面一点。 还是不对,这时候怎么也不应该是x啊,首先reset的时候应该把dffr_s初始化成0,应该前面就不是x了。 原因找到了。 rst一直是x,结果发现resetn敲错了,应该是aresetn。 白废了这么久,还特意写个blog。 不过问题又来了,rst一直是x,为啥后面q又成0了?

  • gs132 ifcbus

    这两天看gs132的代码,看到CPU_gs132/ls132r_interface.v 里面的ifc还没搞明白是什么,应该不是instruction fetch control。 因为从代码里可以看出来,有inst到ifc,也有data到ifc。 output idle_in_ifc_o; input [`Ltoifcbus-1:0] inst_ifc_i; output [`Lfromifcbus-1:0] ifc_inst_o; input [`Ltoifcbus-1:0] data_ifc_i; output [`Lfromifcbus-1:0] ifc_data_o; wire inst_ifc_valid = inst_ifc_i[ 0: 0]; wire [ 3:0] inst_ifc_width = inst_ifc_i[ 4: 1]; wire [ 3:0] inst_ifc_ben = inst_ifc_i[ 8: 5]; wire inst_ifc_wr = inst_ifc_i[ 9: 9]; wire [31:0] inst_ifc_addr...

  • VGA转换HDMI

    新的显示器上有的都不带VGA接口了,只有HDMI什么的。而我需要VGA输出到显示器上,所以得买个转换接口。 这回犯了以前实验室里Johannes里犯过的错,买hdmi2dpi的转换插头结果买成了dpi2hdmi的,虽然两头都能连上,但是接头只发热,没图像。 我这回本来要买vga2hdmi,但先买回来个hdmi2vga,也是连上以后没反应。 后来又买了vga2hdmi的,这个还是需要usb供电的。 结果跑原来soc1的程序屏幕怎么都没显示,但fpga开发板直接连上显示器后刷在上面的马里奥能显示出来,所以传接口是没问题的。 放了这么两三年,基本忘干净了,开始以为是makefile里给quartus的板子的设置,pin的位值和电压什么的设置的不全。 感觉也可能是pad clk没搞对。又怀疑是不是我下的quartus版本有问题,因为机器上很多lib不一定符合要求。之前装了quartus13.1,后面又装了13.0sp1和19.1。 也还是没解决问题,又在windows系统上装19.1,生成的sof还是不行。代码里也折腾了很久。 后来网上找到了卖板子的提供的测试程序,自带的VGA.sof可以点亮显示器。重新编译VGA的项目生成的sof也没问题。。。 这时候又重度怀疑是quartus pin planner上的设置有问题,比如VGA项目里的vga输出都是3.3v,而soc1的都是没指定,默认的2.5v。 把配置项都抄过去,也还是不行。所以又在VGA项目的环境下把soc1的代码都搬过去,还是不行。 这时候已经郁闷好几天了,开始脑洞大开了。 是不是VGA信号输出的时序不准,马里奥的是刷在flash里,而每次用quartus programmer刷进去的应该是在sram里,会不会速度稍微快一点。 所以就准备在控制hsync sync的代码里把时间稍微改改,这些代码也是打开以后一点都不认识了,本来就是往上找的代码改的。当时也没写注释,现在看来真是不知道在干啥。 在数像素点的时候发现text模式用的分辨率是640x400,而VGA例子里用的是640x480。突然想到会不会是因为640x400这个分辨率不太常见,这个vga2hdmi转换接口不支持啊。 网上一搜还真有这个问题,因为毕竟做这个vga2hdmi转换接口的芯片也需要一个一个的支持分辨率,而网上有资料的转接口都是写的最低支持分辨率是640x480。 这个可以解释以上所有现象,结果一试还真的是这个原因。 原来soc1里的配置没问题,2.5v也都可以点亮VGA显示器。 把加了更多参数的c4e6e10pins贴在这里。 # need at least one \n at the begining # Yes, it is safe to ignore incomplete I/O assignment warning messages in the Quartus® II software,...