精华内容
下载资源
问答
  • clk为什么要用posedge,...Verilog中典型的counter逻辑是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 always@(posedge clk or negedge reset) begin if(reset == 1'b0) ...

    clk为什么要用posedge,而不用negedge

    Verilog中典型的counter逻辑是这样的:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    always@(posedge clk or negedge reset) begin
     
        if(reset == 1'b0)
     
            reg_inst1 <= 8'd0;
     
        else if(clk == 1'b1)
     
            reg_inst1 <= reg_inst1 + 1'd1;
     
        else
     
            reg_inst1 <= reg_inst1;
     
    end

     

    clk为什么要用posedge,而不用negedge呢?请教丹内先生,答案如下:

    • 一般情况下,系统中统一用posedge,避免用negedge,降低设计的复杂度,可以减少出错。
    • 在ModelSim仿真中,时钟是很严格的,但是在真实的晶振所产生的clock却是不严格的,比如高电平和低电平的时间跨度不一样,甚至非周期性的微小波动。如果只使用posedge,则整个系统的节拍都按照clock上升延对齐,如果用到了negedge,则系统的节拍没有统一到一个点上。上升延到上升延肯定是一个时钟周期,但是上升延到下降延却很可能不是半个周期。这都会出现问题。
    • QQ截图未命名1
    • FPGA特有的东西:Global CLK。FPGA内部有专门的CLK“线”,和一般的逻辑门的走法不一样,目的是为了保证整个FPGA片内的时钟一致,这个东西就叫Global CLK

    今天找这方面的资料,但发现信息很少,感觉本文说的蛮有道理,所以转载了和大家分享。希望对这个问题有不同理解的,可以交流交流。

    本文转自http://blog.csdn.net/zmq5411/article/details/6054392

    转载于:https://www.cnblogs.com/yuwl26/p/3307580.html

    展开全文
  • negedge是下降沿,电平从高到低跳变 对于典型的counter逻辑 always @(posedge sys_clk or negedge sys_rst_n) begin if(!sys_rst_n) counter <= 24'd0; //十进制0 else if(counter < led_time) begin...
    • posedge是上升沿,电平从低到高跳变
    • negedge是下降沿,电平从高到低跳变

    对于典型的counter逻辑

    always @(posedge sys_clk or negedge sys_rst_n) begin
    	if(!sys_rst_n)
    		counter <= 24'd0;	//十进制0
    	else if(counter < led_time) begin
    		flag_counter = 1'b0;
    		counter <= counter + 1'b1;
    	end
    	else begin
    		counter <= 24'd0;
    		flag_counter = 1'b1;
    	end
    end

    clk为什么要用posedge,而不用negedge呢?

    查了很多网页,发现源头解释为以下内容:

    • 一般情况下,系统中统一用posedge,避免用negedge,降低设计的复杂度,可以减少出错。
    • 在ModelSim仿真中,时钟是很严格的,但是在真实的晶振所产生的clock却是不严格的,比如高电平和低电平的时间跨度不一样,甚至非周期性的微小波动。如果只使用posedge,则整个系统的节拍都按照clock上升沿对齐,如果用到了negedge,则系统的节拍没有统一到一个点上。上升沿到上升沿肯定是一个时钟周期,但是上升沿到下降沿却很可能不是半个周期。这都会出现问题。
    • FPGA特有的东西:Global CLK。FPGA内部有专门的CLK“线”,和一般的逻辑门的走法不一样,目的是为了保证整个FPGA片内的时钟一致,这个东西就叫Global CLK

    技术分享图片

     

     

    展开全文
  • verilog中clock不使用negedge的三个原因

    千次阅读 2007-05-21 14:42:00
    Verilog中典型的counter逻辑是这样的:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->always@(posedge clk or negedge reset) begin if(reset == 1...
    <solotim>
    Verilog中典型的counter逻辑是这样的:

    always@(posedge clk or negedge reset) begin
        
    if(reset == 1'b0)
            reg_inst1 <= 8'd0;
        else if(clk == 1'b1)
            reg_inst1 <= reg_inst1 + 1'd1;
        else
            reg_inst1 
    <= reg_inst1;
    end

    clk为什么要用posedge,而不用negedge呢?请教丹内先生,答案如下:
    • 一般情况下,系统中统一用posedge,避免用negedge,降低设计的复杂度,可以减少出错。
    • 在ModelSim 仿真中,时钟是很严格的,但是在真实的晶振所产生的clock却是不严格的,比如高电平和低电平的时间跨度不一样,甚至非周期性的微小波动。如果只使用 posedge,则整个系统的节拍都按照clock上升延对齐,如果用到了negedge,则系统的节拍没有统一到一个点上。上升延到上升延肯定是一个时 钟周期,但是上升延到下降延却很可能不是半个周期。这都会出现问题。
    • FPGA特有的东西:Global CLK。FPGA内部有专门的CLK“线”,和一般的逻辑门的走法不一样,目的是为了保证整个FPGA片内的时钟一致,这个东西就叫Global CLK。(这个和negedge有什么关系?没搞懂)
     
    展开全文
  • Verilog practice

    2018-07-07 08:51:04
    Q1: write Verilog code to generate below waveform:  Q2: write Verilog code to generate below ...Since there is one delay after the rising edge of data in, three delays after the negedge...

    Q1: write Verilog code to generate below waveform: 

    Q2: write Verilog code to generate below waveform:

    Since there is one delay after the rising edge of data in, three delays after the negedge of din, I write a moore FSM.

    module delay_reg(rst,clk,d_in,d_out);
    input rst,clk, d_in;
    output reg d_out;
    reg [1:0] c_s, n_s;
    parameter s0=2'b00, s1=2'b01,s2=2'b10,s3=2'b11;
    
    always @(posedge clk)begin
     if(rst)	
         c_s<=s0;
      else
    		c_s<= n_s;end
    always@(*)begin
    	case(c_s)
    		s0: begin 
    			if(d_in)
    			n_s=s1;
    			else
    			n_s=s0; end
    		s1: begin
    			if(!d_in)
    			n_s=s2;
    			else
    			n_s=s1; end
    		s2:	n_s=s3;
    		s3:     n_s=s0;
    		default: n_s=s0;
    	endcase
    end
    always@(posedge clk) begin
    	case(c_s)
    		s0:d_out=0;
    		s1:d_out=1;
    		s2:d_out=1;
    		s3:d_out=1;
    	endcase
    end
    endmodule

    Q3 Design an FSM to detect a sequence 10110:

    I designed a Mealy machine:

    module pattern_m(clk, rst, d_in, d_out);
    input clk, rst, d_in;
    output d_out;
    reg [2:0] cstate, nstate;
    parameter s0=3'b000, s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;
    
    always@(posedge clk or negedge rst)begin
    if(~rst)
    	cstate <=0;
    else
    	cstate <= nstate;
    end
    
    always@(*)begin
    	case(cstate)
    		s0:
    			if(d_in) nstate=s1;
    			else nstate =s0;
    		s1:
    			if(~d_in) nstate = s2;
    			else nstate = s1;
    		s2: 
    			if(d_in) nstate = s3;
    			else nstate = s0;
    		s3: 
    			if(d_in) nstate = s4;
    			else nstate = s1;
    	        s4:
    			if(~d_in) nstate = s0;
    			else nstate = s1;
    		default: nstate =s0;
    	endcase
    end
    
    assign d_out = (~d_in)&&(cstate==s4);
    endmodule

    Q4 

    Design an FSM (Finite State Machine) to detect more than one "1"s in the last 3 samples. 

    Use the Mealy machine:

    
     
    module three_sig_detect(din,clk, rst, dout, cstate);
    input din, clk, rst;
    output reg dout;
    output reg [1:0] cstate;
    reg [1:0] nstate;
    parameter s0=2'b00,  s1=2'b01,  s2=2'b10,  s3=2'b11;
    always@(posedge clk or negedge rst)begin
    if(~rst)
    	cstate <= s0;
    else
    	cstate <= nstate; end
    always@(*)begin
    	case(cstate)
    	s0:if(din)
    		nstate=s1;
    		else
    		nstate=s0;
    	s1:if(din)
    		nstate=s3;
    		else
    		nstate=s2;
    	s2:if(din)
    		nstate=s1;
    		else
    		nstate=s0;
    	s3:if(din)
    		nstate=s3;
    		else
    		nstate=s1;
    	default:	nstate=s0;
    	endcase
    end
    always@(posedge clk or negedge rst)begin
    if(~rst)
    	dout <= 0;
    else
    	case(cstate)
    	s0: dout <= 0; 
    	s1: if(din)
    		 dout <= 1;
    		 else
    		 dout <= 0; 			
    	s2: if(din)
    		 dout <= 1;
    		 else
    		 dout <= 0; 
    	s3: dout <= 1;
    	default: dout <= 0; 
    	endcase
    end
    //assign dout=((cstate==s3)?1:0)||((cstate==3)&&din)||((cstate==1)&&din);
    endmodule

    Q5 Divide the clock by 3/2, for example, input frequency=50 Hz, output frequency = 33.33Hz 

    Reference: https://www.edaboard.com/showthread.php?42620-how-to-get-an-2-3-clock-divider-using-VHDL

    module div_2by3(clkout, clkin, reset_n);
       input clkin, reset_n;
       output clkout;
       reg   [1:0]  clk_by3_pos, clk_by3_neg; //two regs that counts from 0 to 2
       
       always @(posedge clkin or negedge reset_n)   //posedge edge of clk_out
         if (!reset_n)
           clk_by3_pos <= 0;
         else
           if (clk_by3_pos == 2)    
             clk_by3_pos <= 0;
           else
             clk_by3_pos <= clk_by3_pos + 1;
    
       always @(negedge clkin or negedge reset_n)  //negedge edge of clk_out
         if (!reset_n)
           clk_by3_neg <= 0;
         else
           if (clk_by3_neg == 2)
             clk_by3_neg <= 0;  
           else
             clk_by3_neg <= clk_by3_neg + 1;
    	
    	assign      clkout = (~clk_by3_neg[0] & clk_by3_pos[0]) | (clk_by3_neg[1] & clk_by3_pos[1]);   
    endmodule 

    Q6 Peak detector

    module peak_detect(clk, track, din, dout);
    input clk, track;
    input [2:0] din;
    output [2:0] dout;
    reg [2:0] d_reg;
    always@(posedge clk or posedge track)begin
    	if (track)
    	d_reg <= d_reg;
    	else if(din > d_reg)
    	d_reg <= din;
    	else
    	d_reg <= d_reg;
    end
    assign dout = d_reg;
    endmodule

    Clock Divider  (ratio = 40)

    module clk_divider #(parameter N = 40,WIDTH = 7)
    (input bus_clk, output reg clk_out, output reg [WIDTH:0]counter);
     
    always @(posedge bus_clk) begin
    	if (counter == N-1) begin
    		counter <= 0;
    	end
    	else begin
    		counter <= counter + 1;
    	end
    end
     
    always @(posedge bus_clk) begin
    if (counter == N-1) begin
    		clk_out <= !clk_out;
    	end
    end
     
    endmodule

     

    展开全文
  • Verilog语法

    2019-09-03 08:47:41
    verilog区分大小写、关键字都是小写 基本语法 parameter关键字定义一个参数,增强模块通用性,例parameter MAX=10; x=MAX; input\output关键字输入输出 always @(posedge/negedge clk)语句,每当clk出现上升下降沿时...
  • Verilog 语法总结

    千次阅读 2019-03-18 22:17:24
    ——时序逻辑建模(时钟驱动,上升沿,下降沿always@(posedge ** or negedge **),有限状态机FSM) ——组合逻辑建模(always@(*)) Verilog HDL描述方法: --结构描述:(例化) --数据流描述:(assign,并行赋值...
  • RTL ←→Verilog module rtlxx ( //分频器,周期为div_param input clk, input reset_n, input a, input b, input c, output reg y, inout reg x ); reg t,k; always @(posedge clk or negedge ...
  • Verilog随记

    2018-09-28 13:13:26
    1、获取上升沿下降沿 ... always @(posedge CLK_50M or negedge rst_n)  begin  if(!rst_n)  begin  {spi_cs_2,spi_cs_1} &lt;= 2'b11;  {spi_sck_2,spi_sck_1} &lt;= 2'b00;  {s...
  • Verilog code

    2017-09-26 14:19:00
    1、计数,用于对精度不高的计数 ...always @(posedge clk or negedge rst_n) begin if(!rst_n) div_cnt <= 1'd0; else div_cnt <= div_cnt + 1'b1; end assign div_clk = div_cnt[8]; ...
  • Verilog LED

    千次阅读 2014-12-24 21:10:08
    module LED (  input clk,//50M  input rst_n,   output led ); reg [22:0] cnt;  ...always@(posedge clk or negedge rst_n) begin  if(!rst_n)  cnt  else if(cnt  
  • Verilog语句简析

    2017-03-02 14:24:42
    Verilog语句简析 Always语句 语法: always [敏感列表] 语句 always语句用来重复执行语句。用敏感列表来控制语句何时开始执行。如果always后面有多于一条语句,则必须使用begin-end或fork-join。 例程...
  • verilog笔试题

    千次阅读 2015-10-22 20:06:19
    Use verilog hdl to implement a flip-flop with synchronous RESET and SET, a Flip-flop with asynchronous RESET and SET.always@(posedge clk or negedge reset or posedge set) begin if(set) Q; else if(!re
  • verilog FSM 范例

    2014-01-25 23:30:17
    verilog FSM 范例 //FSM always @(posedge clk or negedge rst_n)begin if(rst_n == 1'd0)begin sta_curr ; end else begin sta_curr ; end end always @(*)begin case(sta_curr) S_IDLE:begin if(s_idle_...
  • verilog HDL语法总结

    2018-04-25 18:05:21
    Verilog HDL建模方法:——时序逻辑建模(时钟驱动,上升沿,下降沿always@(posedge ** or negedge **),有限状态机FSM)——组合逻辑建模(always@(*))Verilog HDL描述方法:--结构描述:(例化)--数据流描述:...
  • Verilog——LED闪烁

    2020-12-19 14:42:08
    2、编写Verilog程序 module led_cnt ( output reg DS_DP,//灯 input wire clk,//时钟 input wire rst//复位 连接着 KEY4 ); parameter SEC_TIME = 32'd48_000_000;//48M reg [31:0]cnt;//计数 always @ (posedge ...
  • 寄存器Verilog

    千次阅读 2010-07-29 14:36:00
    1。有异步清零端的n位寄存器:module regn(D,clk,reset,Q);... always @(negedge reset,posedge clk) if(!reset) //复位端reset低电平有效 Q else Qendmodule2.D输入端有2选1多路器的D触发器:module mux
  • verilog分频电路

    2020-07-20 13:47:12
    always@(posedge clk or negedge rst_n) begin if(rst_n) clk_o <= 1’b0; else clk_o <= ~clk; end endmodule 八分频电路: module div4( input clk, input rst_n, output reg clk_o ); reg [2:0] cnt; alwa
  • Verilog 奇偶数分频

    2019-03-19 11:28:28
    对于时钟的分频,Verilog而言如果是偶数分频那就可以直接用计数的方式进行分频。 如对频率进行二分频: always@(posedge Clk or negedge Rst) begin if(!Rst) div_2_r<=0; else div_2_r<=~div_...
  • Verilog 时钟分频

    2019-12-04 21:33:50
    看了网上的很多例子,有很多的成长。记录下来。 1.二分频 module sp6( input ext_clk_25m, input ext_rst_n, ...always @(posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) clk_12m5...
  • Verilog小知识 宏定义前面是加上 ` `define clock_period 20 always 多行可以不加begin和end always@(posedge Clk50M or negedge Rst_n) if(Rst_n == 1'b0) led <= 1'b1; else if(cnt == 25'd24_999_999) /...
  • verilog奇偶分频

    2014-04-02 20:03:14
    always@(posedge clk) begin if (cnt1==M) cnt1; else ...always@(negedge clk) begin if (cnt2==M) cnt2; else cnt2; if(cnt2==1'b0) clk_temp2=1; if(cnt2==N) clk_temp2=0; end
  • verilog语法错误

    千次阅读 2018-07-15 17:41:35
    1.写敏感列表always(@posedge or @negedge ext_rst_n),语法检查报错ERROR:HDLCompiler:806 - "E:\ISE14.6\Project\sp6\sp6ex1\source_code\sp6.v" Line 27: Syntax error near "(".仔细检查应...
  • 边沿检测电路的Verilog实现 边沿检测, 就是检测输入信号, 或者 FPGA 内部逻辑信号的跳变, 即上升沿或者下降沿的检测。... output negedge_signal, output posedge_signal ); reg dff1,dff...
  • 秒模块module second (clk1,rst,s,enmin);input clk1,rst;output[6:0]s;output enmin;...always@(posedge clk1 or negedge rst)begin if(!rst) begin s[6:0]&lt=7'h0;enmin&lt=0;endelsebegi...
  • 八分频模块文件:modulediv8(clk_i,clk_o,reset);parameterDIV_N = 8;inputclk_i;inputreset;outputclk_o;...always @(negedge reset or posedge clk_i)beginif(!reset)count<= 0;elseif(count== 7)co...
  • Good Verilog Coding

    2015-07-31 16:21:00
    1. 50%占空比的三分频 module div3(clk, reset, clk_div3); input clk; input reset; output clk_div3; reg clk1;...always@(posedgeclk or negedge reset) begin if(!reset) state<=...
  • 定义2.always@(posedge clk or negedge reset) 前言 了解以太网交换机和老化机制, 在Netmagic08 平台上用verilog语言实现 一、MAC地址表 在NetMagic0平台上实现交换机的功能,可以将其四个端口的MAC地址表表示...
  • VScode配置Verilog预定义代码块

    千次阅读 2019-08-24 21:46:00
    选择Verilog,打开Verilog.json 在里面粘上: "shixu template": { "prefix": "Shixu", "body": [ "always@(posedge clk or negedge rst_n)begin", "if(rst_n==1'b0)begin", "\t\t${1};", "\telse ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

negedgeverilog