精华内容
下载资源
问答
  • posedge上升沿,电平从低到高跳变 negedge下降沿,电平...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语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在……的时候,这个小学应该学过,对吧。verilog中@ 的含义就是触发条件的意思,举个例子,always...

    verilog语言中的@什么意思 verilog语言中的@什么意思

    2012-05-27 22:47

    在英语中@ 读at,也就是在……的时候,这个小学应该学过,对吧。verilog中@ 的含义就是触发条件的意思,举个例子,always 语言加入不加@ 的话,就是一个一直执行的语句常用的是
    always #10 clk=~clk;这是测试文件中常用的语句,这个语句会一直执行,不会停止。如果加了@ 那就是可综合的子集,常用的是always @ (posedge clk)就是clk上升沿时触发语句,也就是只有条件满足时才执行。以上有什么问题可以继续追问
    @英文为 AT,   就是表示条件,即当( posedge clock )时候
    
    @一直翻译为AT的,其实和邮箱地址中的@一样,不过就是邮箱中的@表示位置而已
    展开全文
  • module《模块名》参数定义端口类型说明数据类型定义assignalways initial任务和函数endmodule//8位加法计数器 module counter8(out,cout,data,load,cin ,clk)output【7:0】out;output cout;input load,cin...

    module《模块名》

    参数定义

    端口类型说明

    数据类型定义

    assign

    always initial

    任务和函数

    endmodule

    //8位加法计数器 module counter8(out,cout,data,load,cin ,clk)

    output【7:0】out;

    output cout;

    input load,cin,clk; // load初始位,cin是进位 input【7:0】data;

    reg 【7:0】out; // reg寄存器类型 always@(posedge clk) //总是检测, @有when 的意思。 begin

    if(load)

    out=data //置数 else

    out= out+cin ;//计数或保持 end

    assign cout =&out&cin //&out = out【7】&out【6】。。。。&out【1】所有位endmodule

    bufif1 bufif0 notif1 notif0 三态门

    nand xnor 同或门

    module gateinst (a,b,c,d,y)

    input a,b,c,d

    output y

    wire x

    and andgate(x,a,b,c)

    //加法器

    module counter8(out,cout,data,load,cin,clk);

    output【7:0】 out;

    output cout;

    input load, cin,clk;

    input【7:0】data;

    reg【7:0】 out;

    always @(posedge上升沿 clk) negedge 下降沿

    begin

    if(load) out =data ;

    else

    out =out+cin;

    end

    assign &cin&out ; 连续赋值, 常用对wire变量赋值,随时变化随时赋值

    end module

    过程赋值 :

    1。非阻塞赋值, 块结束时才赋值,

    2。阻塞赋值, 该语句结束时赋值。

    常量:

    位宽‘ 进制 数字

    8是二进制八位 例如 8‘o305 011000101

    变量:网络型 wire 常用来表示assign语句赋值的组合逻辑信号,缺省自动定义为wire型

    寄存器型 reg integer real time

    reg a,b; reg 【7:0】 mymem【1023:0】 1k字节 8bits的存储器

    == 相等和 === 全等的区别是什么?

    A== 1’bx 不会为真 ,而=== 对于x不定态和高阻态z会判断为真

    《=赋值 时序,非阻塞赋值。 =阻塞赋值,组合逻辑电路。

    reg【3:0】a; &a 就是a 每一位互相与

    MUX out =sel?in1:in0;

    优先级

    !~ 运算符

    & , |

    * / %

    initial 主要面向功能模拟,通常不具有可综合性,

    begin

    初始化变量

    初始化存储器

    end

    always@

    begin

    end

    always 不能嵌套

    一般assign是组合逻辑电路 ,直接赋值

    过程赋值 需要reg F ;

    parameter MODULUS = 8’h59 //改变模的大小

    7。7。2

    case = C语言中的switch casez 高阻位不考虑。 casex高阻位和不定值都不考虑。只关心其他位。 ? 也可以

    case(敏感语句式)

    4’d0:

    4’d1:

    4’b1zzx: b=2’b11

    4’b001?: b=2’b01

    endcase

    条件语句:

    条件不满足时,会保持原值。组合电路要列出所有分支。否则会产生隐含触发器。

    repeat (size) 循环size次, begin if() a < 1 b>1 end end

    7。9 task 和function语句

    task 《任务》

    endtask

    function 《返回值位宽或类型》 《函数名》; 手写的时候别忘了;

    endfunction

    7。11 语句的顺序执行 和并行执行

    7。12 Verilog HDL 模型级别

    行为描述级: 系统级,算法, 寄存器级

    门级

    开关级

    7。12。1 行为级描述

    Q &A

    Q:为什么综合后点了debug没有出现原理图呢?

    A: 因为测试文件置为顶层。重新设置顶层

    Q:可不可以就一部分simulation? 比如只simulate comp ?

    A:右击相应测试文件,设为顶层文件

    出现的错误:

    1. 调用mux的模块名字错了。解决方法:Mux模块名字改成对应的。 成功仿真。

    2.仿真MUX结果,没有输出。 因为寄存器没有设置位宽 只写了reg out ;解决方法:改成 reg【N-1:0】 out

    3. 信号只有in,out。无法调试。因为之前将测试文件置为顶层。解决方法:重新设置顶层。出现了各个模块的信号。

    4. 端口不对应 in0输入有问题。解决方法: 修改in0(in0)为in0(a) 括号里 a为线,in0为模块中的端口。

    5. 波形出错, 没有加入MUX 解决方法: 加入MUX

    心得:

    1.控制器一般采用二段式或三段式。

    2.Verilog 不能用reg 作为调用模块的输出, 得用wire。

    3.Modelsim 第三个可以zoom fit 直接窗口一样大小。

    4.{}用作位拼接,所以 verilog中用begin end 来替代{}

    5.zoom in active curve 可以以光标为中心放大。

    6. always@(*) //always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。

    7. 改掉一个错误之后可以直接再次编译,因为一个错误有连环错误。

    8. 控制器clear变量, always 里就是reg型, always外是wire型.

    出现错误:

    1.调用按键处理的模块名字错了。解决方法:按键处理模块名字改成对应的。 成功仿真。

    2.仿真结果,没有输出。 因为寄存器没有设置位宽 只写了reg out ;解决方法:改成 reg【N-1:0】 out

    3. 信号只有in,out。无法调试。因为之前vivado将测试文件置为顶层。解决方法:重新设置顶层。出现了各个模块的信号。

    4. 端口不对应 in0输入有问题。解决方法: 修改in0(in0)为in0(a) 括号里 a为线,in0为模块中的端口。

    5. 波形出错, 没有加入MUX 解决方法: 加入MUX

    6.下载后显示出错 解决方法: 52位没必要用变量传递,

    7. 一开始的时候parameter sim是0,tb测试时才传入1

    8. Q:为什么综合后点了debug没有出现原理图呢?

    A: 因为把测试文件置为顶层。重新设置顶层

    9. Q:可不可以就一部分simulation? 比如只simulate comp ?

    A:右击相应测试文件,设为顶层文件

    10. 还有一个错误,是输入变量不能直接定义为reg。

    展开全文
  • Verilog中always@()语句的意思always模块中的任何一bai个输入信号或电平发生变化时,该语句下方的模块将被执行。 1、always语句有两种触发方式。第一种电平触发,例如always @(a or b or c),a、b、c均为变量...

    在Verilog中always@()语句的意思是always模块中的任何一bai个输入信号或电平发生变化时,该语句下方的模块将被执行。
    1、always语句有两种触发方式。第一种是电平触发,例如always @(a or b or c),a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。
    2、第二种是沿触发,例如always @(posedge clk or negedge rstn),即当时钟处在上升沿或下降沿时,语句被执行。
    3、而对于always@(
    ),意思是以上两种触发方式都包含在内,任意一种发生变化都会触发该语句。

    展开全文
  • 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) ...
  • module DFF_ASYNC_RST (Data, Clk, Reset, Q); input Data, Clk, Reset; output Q; parameter U_DLY =1;...always @ (posedge Clk or negedge Reset) ... 这里不懂是什么意思,求解答 else Q ; endmudule
  • 连续@posedge可以综合,如果后面阻塞赋值,会...@(posedge clk) b = a; @(posedge clk) c = b; $display("blocking2 a = %b b = %b c = %b",a,b,c); @(posedge clk) begin c = b; b = a; $display("b...
  • clk什么要用posedge,而不用negedge  转自:...  Verilog中典型的counter逻辑这样的: 1 always@(posedge clk or negedge reset) begin 2 3 if(reset == ...
  • Verilog Assertions

    2019-07-13 21:50:00
    目前在看SystemVerilog Assertions的书,里面将Verilog写的Assertion和SVA做了比较,对于里面的 @(posedge clk) 之类的语句究竟什么时刻响应有点迷糊,所以自己写了一点做了点尝试。 写了个简单的波形,如下:...
  • **1.Verilog中如果没说明参数的类型,那么默认就是wire型的,这也就是为什么一般input的话都没有写类型,因为它只能wire型的。**比如说上面的例子,如果我们把top模块中的clk变量类型改为reg型的,直
  • input clk, input rst, output [3:0] led ); reg [23 : 0] cnt_reg; reg [ 3 : 0] light_reg; always @ (posedge clk) begin if (rst) cnt_reg ; else cnt_reg ; end always @ (posedge clk) ...
  • 最近用Verilog HDL设计了一个小电路,一个3分频的电路,用的我刚接触FPGA时,别人告诉我的思路,没想到今天才发现有大问题? 如下: module Freq_divide( input clk, input rst_n, output reg clk_divide ...
  • 下面代码: //分频模块 module fenpin(rst, clk, clkk); input rst; input clk; output clkk; reg clkk; always @(posedge clk) if(!rst) begin clkk<=0; end else begin clkk<=~clkk; end endmodule //选择...
  • 有俩个不一样的时钟 要求要在clk2上升沿到来时开始以clk上升沿计数累加 用什么语句 有想法的大神们帮忙提点一下
  • verilog实现脉冲检测

    千次阅读 2020-07-03 14:05:08
    但要注意题目里对pulse的定义是什么,本题中pulse是指一个时钟周期宽度的窄脉冲 verilog代码: module pulse_detector(input clk, rst_n, din, output pulse_high_detect); reg q0,q1; assign pulse_high_...
  • Verilog同步复位的解决方法

    千次阅读 2013-08-10 00:29:47
    先来明确下什么是同步复位: 同步复位:就是指复位信号只有在时钟上升沿到来时,才能有效,否则无法完成对系统的复位工作。用verilog描述如下: always @ (posedge clk) begin if (!Rst_n) ... end 异步复位:它...
  • 初看这段代码,发现这里的din有两次进行赋值,首先进行din的自加1操作,然后去判断en的值,为1的话然后将另外一个值减1在赋值给din,那最终的结果应该为什么了? 为此,特意写了一段代码,以及给代码的测试...
  • 仿真时可以看到,dout变为0并不在rst的第一个下降沿,后面每次dout计数也不是在clk上升沿,而是有一个7ns的延时 ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562649796_648098.png) 求大佬帮忙看...
  • 我的状态机代码和test代码分别如下: module transformation (a,b,s,clk,S,C,X); input a,b,s,clk; output S,C,X; ...always @ (posedge clk) ...仿真后发现全部都高阻,这什么啊?要怎么改呢?
  • Wyre是什么样的?这是一个基本的示例设计,带有2个模块,一个时钟输入,一个按钮和3个LED。 top(clk $1, button $1) { out reg leds $3 posedge clk { if button { leds <= '111 } else { leds <...
  • module test(); wire a,b,clk,C,X,reset; reg a1,b1,reset1,clk1; initial begin ...assign clk1=0;...always #5 clk1=!clk1;...assign clk=clk1;...这我的test代码,出来之后除了C和X的值都为0什么
  • 1、什么是组合逻辑与时序逻辑 2、同步有限状态机 3、数据在寄存器中暂时保存 module register8(ena,clk,rst_n,din,dout) input ena,clk; input [7:0] din; output [7:0] dout; reg [7:0] dout; always @...
  • 因此首先来谈谈什么是分频。 对于偶数分屏,如四分频,我们可以发现其分频后的时钟的跳变,无论上升沿还是下降沿都统一在原始时钟信号的上升沿如clk1, 或者下降沿如clk2。如下图所示; 因此对于偶数的分频...
  • verilog语法:进程名

    2015-02-05 13:59:00
    always @ (posedge clk, negedge rstn)begin:State_flipflops if(!rstn) y<=S1; else y<=Y;end请问这段程序中的State_flipflops代表什么意思? 一个 名 而已,为了在其他地方可以调用。还可以在begin 和 ...
  • 有前辈帮我解决一下问题吗,verilog语言写的一个带进位和借位输出的2位二进制可逆计数器,编译出来有error,但是实在不知道为什么错,希望有前辈找一下瑕疵。下面代码,加粗有下划线的语句的modelsim给出的错误的...
  • verilog 好多时候,应该知道自己写的代码电路结构是什么样子, 下面分析一下:  module tb( input clk, input rst_n, input de, output [11: 0] cntx ); reg [11: 0] cntx; always @(posedge clk or ...
  • 现在碰到一个问题,对于以下代码 always(@posedge clk) begin if(a==1'b1 && cnt) cnt; else if(a==1'b1 && cnt==5'd18) b; else if(a==1'b0 && cnt>5'd0) ...请问这究竟是什么原因导致的,谢谢!
  • 代码规范有利于在项目和工程中的维护,...下面就看下各个情况的规范书写格式是什么 1.时序逻辑的规范写法: always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin tmp_init&lt;=1'b0; end...
  • basys2 数码管动态显示 verilog解决办法发布时间:2021-01-14浏览(1536)basys2 数码管动态显示 verilog什么数码管动态显示定义的管脚顺序和我设计的反的~~求助啊在线等!!!!!输入x[3:0]显示的最左边的管子...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

clk是什么verilog