|
前段时间,有个学弟叫我帮他用verilog 来写一个实现I2C传输的程序。就协议本身并没有什么复杂的东西,因为按照所要求的时序规范,用状态机很容易就可以实现。但是问题在于我那学弟他说老师要求他用模块化的方式来实现,开头,结尾和传输数据等要分开来做。按一般来讲这是合理的,因为模块化设计思路清晰,设计会更加规范,但问题在于这要用到IO口的双向操作,模块间的连接是不可以定义双向端口来传输的(这样做的话编译不会出错,但会产生警告,在一般情况下这是会产生不可预知的错误的),而只能用在顶层模块与外部连接(即只能用在端口上。当然对于内部模块的单元的双向读写不存在这种问题,但这是完全不同的两种情况。)最后没有办法为了实现多个模块切换地用上端口,只能用4根线对应一根线的方法来做,结果很简单的操作搞得好不复杂。