这个verilog的程序错在那里?
当输入的端口上数据有变化时,输出一个负脉冲到MCU,assignin_int = creat_int_function(read_reg,old_read_reg);
function creat_int_function;
input read_reg,old_read_reg;
if( old_read_reg == read_reg )
creat_int_function = 1'b1;
else
creat_int_function = 1'b0;
endfunction
read_reg的数据是时时在更新的, old_read_reg是保存前一次read_reg的值;
当MCU读取read_reg的值后,更新old_read_reg;
1.初始时read_reg = old_read_reg;
2.in_int = 1;
3.当端口上数据有变化时,根据以上程序,in_int=0;
4.外部MCU检测到in_int下降沿,读取数据,这时CPLD使old_read_reg = read_reg,那么in_int = 1;
但是实际上并没有这个下降沿,也就是说,无论端口数据怎么变化,in_int 总是为1;
刚学习verilog,希望明白的能指点一下下,,
谢谢了,, assignin_int = creat_int_function(read_reg,old_read_reg);
function creat_int_function;
input read_reg,old_read_reg;
if( old_read_reg == read_reg )
creat_int_function = 1'b1;
else
creat_int_function = 1'b0;
endfunction
---------------------------------------------
你用的是函数的方法来实现,但是函数是要有返回值的,你现在的函数没有返回值,当然
assignin_int = creat_int_function(read_reg,old_read_reg); 这句就没有起到赋值作用了。
建议重新编写一下函数部分 谢谢楼上的答复.
函数有返回值
assignin_int = creat_int_function(read_reg,old_read_reg);
function creat_int_function;
input read_reg,old_read_reg;
if( old_read_reg == read_reg )
creat_int_function = 1'b1; // 返回1
else
creat_int_function = 1'b0; // 返回0
endfunction
想来想去都没错啊``怎么就不行呢 问题找出来了,其实还是程序错误
assignin_int = creat_int_function(read_reg,old_read_reg);
function creat_int_function;
input read_reg;
input old_read_reg;// 这里应该指定位数,否则默认的只是1位,
// 若不指定位数,实际上传递进来的只read_reg和old_read_reg中的最低位
if( old_read_reg == read_reg )
creat_int_function = 1'b1; // 返回1
else
creat_int_function = 1'b0; // 返回0
endfunction 原来如此
页:
[1]