首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发器的正确建模方法

触发器的正确建模方法
EN

Stack Overflow用户
提问于 2014-09-17 04:24:54
回答 1查看 922关注 0票数 0

我正在浏览一个来自微半导体网站(Actel HDL代码)的文档,我发现了一些触发器(同步,异步等).In的实现--所有的例子都是作者用阻塞语句对触发器建模的。

我想知道这些实现是否正确,因为我一直使用非阻塞来建模顺序逻辑?我是遗漏了什么,还是仅仅是一种模拟触发器的方式,而不是一般的时序电路?

代码语言:javascript
复制
// Rising Edge Flip-Flop with Asynchronous Reset
module dff_async_rst (data, clk, reset, q);
  input data, clk, reset;
  output q;
  reg q;

   always @(posedge clk or negedge reset)
     if (~reset)
       q = 1'b0;
     else
       q = data;

   endmodule

//Rising Edge Flip-Flop with Synchronous Reset
module dff_sync_rst (data, clk, reset, q);
  input data, clk, reset;
  output q;
  reg q;

  always @ (posedge clk)
    if (~reset)
      q = 1'b0;
    else 
      q = data;

endmodule

注意:总是块中使用阻塞赋值来获得顺序逻辑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 11:55:20

触发器应该按照您以前的想法使用非阻塞(<=)建模。

如果在verilog 1995之后使用任何版本的verilog,那么可以稍微整理一下端口声明。为了清晰起见,我添加了begin,并添加了_n来指定活动的低信号。

带异步复位的上升边缘触发器

代码语言:javascript
复制
module dff_async_rst (
  input  data,
  input  clk, 
  input  reset_n,
  output reg q    //SystemVerilog logic is preferred over reg
);

always @(posedge clk or negedge reset_n) begin
  if (~reset_n) begin
    q <= 1'b0;
  end
  else begin
    q <= data;
  end
end

endmodule

同步复位的上升边缘触发器

代码语言:javascript
复制
module dff_sync_rst(
  input  data,
  input  clk, 
  input  reset_n,
  output reg q    //SystemVerilog logic is preferred over reg
);


always @(posedge clk) begin
  if (~reset_n) begin
    q <= 1'b0;
  end
  else begin
    q <= data;
  end
end

endmodule
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25882292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档