微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于function的使用问题,求牛人帮忙看看

关于function的使用问题,求牛人帮忙看看

时间:10-02 整理:3721RD 点击:

function valid_channel;
input valid_in;
input [11:0] datai_channel_d;
input [11:0] Hmark,Lmark;
begin
valid_channel = (datai_channel_d > Hmark)? 0 : (
       (datai_channel_d < Lmark)? 1 : valid_in
       );
end
endfunction
always @(posedge clk50m or posedge rst50m)
if (rst50m)
begin
valid_b = 1;
valid_a = 0;
valid_c = 0;
valid_d = 0;
end
else
begin
valid_b = valid_channel(valid_b, datai_chb_0, Hmark_chc ,Lmark_chc);
if(valid_b == 0)
begin
  valid_a = valid_channel(valid_a, datai_cha_0, Hmark_chc ,Lmark_chc);
  if(valid_a == 0)
  begin
   valid_c = valid_channel(valid_c, datai_chc_0, Hmark_chc ,Lmark_chc);
   if(valid_c == 0)
   valid_d = 1;
  end
end
end
这样使用function可以吗?在这里时序逻辑电路中使用阻塞赋值不会有问题吗?我看夏宇闻的《verilog数字系统设计教程》中说:时序电路建模时,用非阻塞赋值。关于这段代码,我设计一个testbench在ISE12.4中仿真是没有问题,综合也没有发现latch warning,可是我还是觉得这样写可能有问题,我不知道怎么向他们证明这一点,求大牛们多多指教啊?

function不能带有延迟的东西。

诡异的写法....时序和组合电路,夹杂在一起...
我觉得会有毛刺问题..

function是不会产生latch的,对与你下面的always块明显可以分开,每个用一个always块,这样结构清晰,也不会有你现在想问的这些纠结问题.不知道你的功能是否正确。单从语法上来说问题不打,但是这种代码像是软件工程师写的,根本没有逻辑电路设计工程师的感觉,写这种代码只能说还没入门。都是国内一些教课书害的,还是多看看国外的原著进步比较大。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top