barriers / 阅读 / 详情

Verilog 语法问题

2023-08-01 18:27:32
共1条回复
苏萦
你是不是错误提示:Error (10200): Verilog HDL Conditional Statement error at ……: cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct
这是因为,你的“always@(posedge clk or negedge r_est)”表明在clk上升沿或r_est下降沿这两个敏感事件发生时always语句块得以触发;而always中的if条件语句必须至少有一个条件指向其中一个敏感事件(边界标识符);所以写成“if(r_est)...else...”就会出错。

你可以把“always@(posedge clk or negedge r_est)”改为“always@(posedge clk or posedge r_est)”再编译试试,应该就没问题了。

你右键该错误点击“Help”里是这么说的:
CAUSE: In a conditional statement at the specified location in a Verilog Design File (.v), you specified a condition that Quartus II Integrated Synthesis cannot use to classify the edges in the enclosing always construct"s event control. When an event control contains multiple edges, Quartus II Integrated Synthesis distinguishes the asynchronous control signals from the clock by analyzing the conditional statements in the always construct. For example, the following code fragment contains an always construct whose event control contains three edges---two asynchronous resets and a clock.
always @ (posedge clk or posedge rst1 or posedge rst2)
begin
if ( rst1 || rst2 )
q <= 1"b0;
else
q <= d;
end
Quartus II Integrated Synthesis uses the if condition to identify the two asynchronous resets and, by implication, the clock. For edge classification, Quartus II Integrated Synthesis requires that a condition fall into one of two categories. It can refer to a single edge identifier (to match posedge events) or its complement (to match negedge events), for example, rst1, !rst1, rst1 == 1"b1, rst1 == 1"b0. It can also OR two or more expressions that each refer to a single edge identifier or its complement, for example, (rst1 || rst2), (!rst1 || !rst2).
You can receive this error if your condition tests for the wrong polarity, or if it tests for the value of a variable that is not an edge in the event control. For example, to match a posedge rst event, the condition must be rst or rst = 1"b1.
Finally, you can receive this error if you are attempting to use a single condition expression to test for both an asynchronous reset/set and a synchronous reset/set condition. The following code fragment contains an example of an illegal condition expression:
always @ (posedge clk or posedge rst)
begin
if ( rst || sync_rst )
q <= 1"b0;
else
q <= d;
end
Quartus II Integrated Synthesis generates this error message when compiling this design because it cannot match sync_rst to an edge on the sensitivity list.

其中关键的语句我摘译一下,不一定译得准确,不过大体意思我想你应该可以了解了:
原因:……指定了一个条件,Quartus II 综合器不能够将该条件用于在封闭的always结构的事件控制中对边界进行区分。当一个事件控制中包含多重边界,Quartus II 综合器通过分析always结构中的条件语句来对时钟和异步控制信号加以区分。……
Quartus II 综合器采用if条件来鉴别两个异步reset信号,并隐含地鉴别了clock信号。为了分类的需要,Quartus II 综合器需要有一个条件落入两个类别之一。它可以指向一个单独的边界标识符(以匹配posedge事件)或它的补语(以匹配negedge事件),例如, rst1, !rst1, rst1 == 1"b1, rst1 == 1"b0。它也可以是OR两个或更多的表达式,其中每一个指向一个单独的边界标识符或它的补语……
当你的条件测试发现错误极性,或者它测试变量的值,但该值在事件控制中并不是一个边界时,你会接到这个错误。例如,为了匹配一个posedge rst事件,条件必须是rst或rst = 1"b1。

编译错误时多看看Help,讲得很详细~

相关推荐

高电平、下降沿的定义分别是什么?

1、数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫作上升沿。硬件描述语言在Verilog等硬件描述语言中,用“posedge”表示“上升沿”。2、数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。硬件描述语言在Verilog等硬件描述语言中,用“negedge”表示“下降沿”。扩展资料控制器高电平与低电平区别1、控制器上标识的高低电平为刹车,高电平一般规定为5V以上,低电平为0V左右。2、在不同电路上的电压值不相同,如果是5V供电的数字电路,高电平就是5V,或接近5V。低电平就是‘无",就是0V或接近0V。3、控制器的高电平是通,低电平是控。参考资料来源:百度百科——高电平参考资料来源:百度百科——上升沿参考资料来源:百度百科——下降沿
2023-08-01 13:26:011

谁知道Verilog 中的posedge用法是什么?为什么有这两个错误?

你那样写有语法错误很正常啊,posedge一般都用于always @()的括号内,表示THR的上升沿到来时,运行always快内的程序,你如果需要用到THR的上升沿来作为判断条件,建议你这样写代码:reg THR1;reg THR2;always @ ( posedge clk_1M or negedge reset_n ) if( !reset_n ) begin THR1 <= 1"b0; THR2 <= 1"b0; end else begin THR1 <= THR; THR2 <= THR1; endalways @( posedge clk_1M ) if( count1>=20000 || ( THR1 && !THR2 ) ) count1 <= 0;else count1 <= count1 + 1;
2023-08-01 13:26:141

always@(posdge clk) 什么意思

就是时钟沿上升时触发always后面的语句。always后面是敏感值列表。posedge是正沿的意思,你拼错了。clk应该是时钟的周期信号吧。表示时钟的上升沿到来时下面的语句就触发了。
2023-08-01 13:26:231

为什么再用verilog编写程序时,always@(posedge clock or reset)语句是非法的?

posedge是时序逻辑,单单一个reset是组合逻辑两者必须分开书写。
2023-08-01 13:26:334

使用Verilog如何设计一个上升沿检测器?

Posedge用来作为时钟使用的。相当于触发器的时钟输入端。要检测信号上升沿的话,可以采用以下方法:always@(posedge clk or negedge rst)if(!rst)begin sign_1b <= 1"b0; sign_2b <= 1"b0; endelsebegin sign_1b <= sign; sign_2b <= sign_1b; endalways@(posedge clk or negedge rst)if(!rst)sign_pos <= 1"b0;else if (sign_2b && !sign_1b)sign_pos <= 1"b1;elsesign_pos <= 1"b0;
2023-08-01 13:26:432

verilog if条件中能用posedge作为判断条件吗

不可以的。。。。。
2023-08-01 13:26:513

可综合verilog posedge和negedge可以出现在一个always中吗

对于不同的信号可以,但不可以同时采集同一个信号的posedge和negedge.
2023-08-01 13:27:004

verilog always@(posedge clk or posedge clrb)表示 清零端是高电平有效吗

always@(posedge clk or posedge clrb)表示 清零端是高电平有效,posedge代表上升沿;negedge代表下降沿;代表clrb异步复位信号,如果没用posedge clrb,为同步复位信号,就是需要时钟跳变时,输出才发生变化。触发器复位有高电平有效,也有低电平有效。
2023-08-01 13:27:081

verilog hdl中有了posedge和negedge为什么还要用脉冲边沿检测?。

谁说不能呢?只要PS2协议允许,完全可以使用啊
2023-08-01 13:27:272

verilog中没有always的@如何理解?

我想问一下多个@(posedge clk)语句一起是并行执行还是串行执行的呢?
2023-08-01 13:27:352

verilog中reg变量赋初始值问题

不能,可不可以把完整的程序,发给我看下!!
2023-08-01 13:27:445

verilog语言中,如何给变量赋初值,并能保证赋初值的语句与后面的always是顺序执行的。

initial是初始化时使用的吧?你可以这样,先定义变量的位宽,再做别的always@(触发条件)begin 具体语句end
2023-08-01 13:28:024

verilog 原语门级原语有哪些

(1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。(2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。(3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。建立可综合模型的原则要保证VerilogHDL赋值语句的可综合性,在建模时应注意以下要点:(1)不使用initial。(2)不使用10。(3)不使用循环次数不确定的循环语句,如forever、while等。(4)不使用用户自定义原语(UDP元件)。(5)尽量使用同步方式设计电路。(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。(7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。(8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。(9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。(10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。(11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。(12)避免混合使用上升沿和下降沿触发的触发器。(13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。(14)避免在case语句的分支项中使用x值或z值。不能综合的语句:1、initial只能在testbench中使用,不能综合。(我用ISE9.1综合时,有的简单的initial也可以综合,不知道为什么)2、eventsevent在同步testbench时更有用,不能综合。3、real不支持real数据类型的综合。4、time不支持time数据类型的综合。5、force和release不支持force和release的综合。6、assign和deassign不支持对reg数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。7、forkjoin不可综合,可以使用非块语句达到同样的效果。8、primitives支持门级原语的综合,不支持非门级原语的综合。9、table不支持UDP和table的综合。10、敏感列表里同时带有posedge和negedge如:always@(posedgeclkornegedgeclk)beginend这个always块不可综合。11、同一个reg变量被多个always块驱动12、延时以开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。如:a=10b;这里的10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;13、与X、Z的比较可能会有人喜欢在条件表达式中把数据和X(或Z)进行比较,殊不知这是不可综合的,综合工具同样会忽略。所以要确保信号只有两个状态:0或1。
2023-08-01 13:28:101

verilog中posedge后面都是时钟clk,能不能跟其他信号呢?

是的,在a的上升沿,c就会变为1
2023-08-01 13:28:191

Verilog negedge与posedge的区别

一个下降沿 一个表示上升沿
2023-08-01 13:28:271

verilog中if的判断语句可以写(posedge 某信号)吗?

不能那么写。send_start比较长打一拍就行了reg send_start_d;always@(posedge CLK_SP) send_start_d <= send_start;这样上升沿可以写成if(send_start_d == 1"d0 && send_start == 1"d1)就是上一拍还是0这一拍是1我们就认为他是上升沿了
2023-08-01 13:28:341

用Verilog编写时,always@(a,b,posedge cp) 为什么不对啊?正确的应该怎么写?

你好!综合丹甫草晃禺浩碴彤厂廓器无法给你综合成对应的器件,@posedgecp综合成上升沿触发的寄存器,不能和电平信号写在同一敏感列表中正确的应该是always@(*)或者always@(posedgecpornegedgerst_n)前者对应组合逻辑,后者对应时序逻辑打字不易,采纳哦!
2023-08-01 13:28:411

verilog 中为何要用基础时钟侦查其他时钟信号的上升沿,而不用posedge直接测

最好不要用运算之后的信号来做一个模块的输入时钟,因为信号的时钟要求非常高的质量,对于duty-cycle, jitter, skew(占空比、抖动、偏移)都有非常高的要求。但是组合逻辑生成的时钟可能会有毛刺等等对于时钟是非常致命的东西。除非你非常有把握,否则不建议这样的设计方法。说明:在时序电路设计中,尽量使用全局时钟,而不要用由全局时钟衍生出来的信号。希望可以帮到你
2023-08-01 13:28:511

verilog如何实现:每按一次按键,将输入的值存储进缓存器中?用posedge被当成时钟

肯定不是这样用的,我建议你首先学习按键防抖是怎么做的。百度一大把一大把的源码,看懂了按键是怎么处理的再做进一步的设计,你这样的代码属于未入门级别的。
2023-08-01 13:29:091

设计一个可控的100进制可逆计数器

always@(posedgeclkorposedgeplusorposedgeminusorposedgepause)晕..楼上的瞎写..楼主可参看我的空间,里面对关于一些HDL方面的知识点的列举.谢谢modulecnt100(clk,clr,plus,minus,high_b,//10位数low_b//个位数);inputclk;inputclr;inputplus;inputminus;output[3:0]high_b;//10位数output[3:0]low_b;//个位数reg[3:0]high_b;//10位数reg[3:0]low_b;//个位数always(posedgeclk)beginif(clr)low_b<=4"b0;//同步清零elseif(plus)//加beginif(low_b==4"b1001)low_b<=4"b0;elselow_b<=low_b+1;endelseif(minus)//减beginif(low_b==4"b0)low_b<=4"b1001;elselow_b<=low_b-1;endelse//暂停low_b<=low_b;endalways(posedgeclk)beginif(clr)high_b<=4"b0;//同步清零elseif(plus&&(low_b==4"b1001))//进位beginif(high_b==4"b1001)high_b<=4"b0;elsehigh_b<=high_b+1;endelseif(minus&&(low_b==4"b0000))//借位beginif(high_b==4"b0)high_b<=4"b1001;elsehigh_b<=high_b-1;endelse//暂停high_b<=high_b;endendmodule
2023-08-01 13:29:183

verilog中d触发器的异步高电平复位是什么意思

异步高电平复位就是复位信号只要变高电平就执行复位操作,如果是同步的话就要看复位信号是否在时钟有效沿为高电平。
2023-08-01 13:29:262

根据下面原理图写出Verilog HDL程序

module not_1(clk,din,clr,qout); input clk,din,clr; output qout; reg qout; always@(posedge clk or posedge clr) begin if(clr) qout <= 1"b0; else qout <= ~din; end endmodule
2023-08-01 13:29:362

modelsim仿真出现错误 $hold( posedge WENeg:10 ns, CENeg:10 ns, 1 ns ) 什么意思?

应该是hold违例,修改修改input的输入延时,修改修改clk周期,试试也行
2023-08-01 13:29:442

用Verilog HDL设计十进制减法计数器

modulecount#(parametersize=4)(inputclock,load_n,clear_n,updown,input[size-1:0]load_data,outputreg[size-1:0]q);always@(negedgeload_n,negedgeclear_n,posedgeclock)if(!load_n)q<=load_data;elseif(!clear_n)q<=0;elseif(updown)q<=(q+1)%10;elsebeginif(q==0)q<=9;elseq<=q-1;endendmodule
2023-08-01 13:29:533

verilog 变量怎么赋初值

不知道你是要做验证还是设计,如果是验证的话,不要求可综合,可以简单写成:always@ (posedge a)begin @ (negedge b) c<=...;end如果要想可综合的话,需要用状态机类似的概念,即设一个标志位,当a上升沿来是,把它赋值为1,当它为1且b下降沿来时,给c赋值,并将它赋值回0:并且,如果a,b不是时钟的话,不推荐使用posedge的写法采用下面的方法比较好:reg a_dly,b_dly; //a,b的1始终delay信号wire a_pos,b_pos; //a,b的上升沿抓取信号assign a_pos = a & !a_dly;assign b_pos = b & !b_dly;reg flag;//标志位always@(posedge clk or posedge rst)begin if(rst) begin a_pos <= 1"b0; b_pos <= 1"b0; end else begin a_pos <= a; b_pos <= b; endendalways@(posedge clk or posedge rst)begin if(rst) flag <= 1"b0; else if(a_pos) flag <= 1"b1; else if(b_pos) flag <= 1"b0;endalways@(posedge clk)begin if(flag & b_pos) c<=....end把flag赋值回为0很重要,不然逻辑有问题。用3段状态机写就是parameter IDLE = 2"h0;parameter WAIT_B_POS = 2"h1;parameter GET_C = 2"h2;reg [1:0] cs; //current statereg [1:0] ns; //next state//1段 状态转换always@(posedge clk or posedge rst)begin if(rst) cs <= IDLE; else cs <= ns;end//2段 状态迁移always@(a_pos or b_pos or cs or ns)begin ns = XX; //设置ns为xx case(cs) IDLE: begin if(a_pos) ns = WAIT_B_POS;//用阻塞赋值 else ns = IDLE; end WAIT_B_POS:begin if(b_pos) ns = GET_C; else ns = WAIT_B_POS; end GET_C:begin ns = IDLE; end default:; endcaseend//3段 赋值always@(posedge clk or posedge rst)begin if(rst) c<=1"b0; else begin if(ns == GET_C) c <= .....; endend用状态机写的好处就是不用加标志位了,但是个人觉得没有必要这样写。能力有限,错误请指正
2023-08-01 13:30:131

verilog编程中当多个always出现时 先运行那个?例如下面的例子是一个半周期的方波信号

是并行运行的,ALWAYS 语句 里面的内容是串行运行的!
2023-08-01 13:30:233

quartus ii 中问题,always @(posedge CLK) begin : CNT11B_LOAD// 11位可预置计数器 怎么解释啊。

TN就是预置数,每次从预置数开始计数,到11"h7FF时重新置数,并输出1,否则输出0。这样下来,计数的周期就是(11"h7FF-TN)次,而不是固定的11"h7FF次或者其他值。预置数就是起到计数器周期可控的目的。而输出SPKS是只在每次计数结束时才置一,也就是使输出信号周期可控。
2023-08-01 13:30:351

求大神帮忙解释这个程序verilog

module trafficlight(clk,clr,out1,out2,Q_R1,Q_R2,Q_G1,Q_G2,Q_Y1,Q_Y2); //定义模块以及端口input clk,clr;output Q_R1,Q_R2,Q_G1,Q_G2,Q_Y1,Q_Y2;output [3:0]out1,out2;reg [4:0]State,NextState; //定义状态机 按你下面的话这应该要定义成【5:0】reg [4:0]cnt; //计数器reg [4:0]count,cout; 计数器reg Q_R1,Q_R2,Q_G1,Q_G2,Q_Y1,Q_Y2; 应该是洪绿黄灯了reg flag=0,fout=0; 标志位和输出parameter IDLE=6"B000001,State_A=6"b000010,State_B=6"b000100,State_C=6"b001000,State_D=6"b010000;always@(posedge clk)beginif(cnt==5"b00000)begincnt<=5"b11110;flag<=~flag;endelsecnt<=cnt-1;endalways@(posedge clr or posedge clk) 定义状态机起始状态beginif(clr)State<=State_A;else State<=NextState;endalways@(State or cnt or flag)begincase(State) 状态机转移程序IDLE: begin NextState<=State_A; 这里初始状态应该是idle吧end State_A:beginif((cnt==5"b00101)&&(flag==0))NextState<=State_B;else NextState<=State_A;endState_B:beginif((cnt==5"b00000)&&(flag==0))NextState<=State_C;else NextState<=State_B; end State_C:beginif((cnt==5"b00101)&&(flag==1))NextState<=State_D;else NextState<=State_C;endState_D:beginif((cnt==5"b00000)&&(flag==1))NextState<=State_A;else NextState<=State_D;end default:NextState<=IDLE;endcaseendalways@(State)begincase(State) 根据各状态得到交通灯的输出状态值IDLE:beginQ_R1<=0;Q_R2<=0;Q_G1<=0;Q_G2<=0;Q_Y1<=0;Q_Y2<=0;endState_A:beginQ_R1<=0;Q_R2<=1;Q_G1<=1;Q_G2<=0;Q_Y1<=0;Q_Y2<=0;endState_B:beginQ_R1<=0;Q_R2<=1;Q_G1<=0;Q_G2<=0;Q_Y1<=clk;Q_Y2<=0;endState_C:beginQ_R1<=1;Q_R2<=0;Q_G1<=0;Q_G2<=1;Q_Y1<=0;Q_Y2<=0;endState_D:beginQ_R1<=1;Q_R2<=0;Q_G1<=0;Q_G2<=0;Q_Y1<=0;Q_Y2<=clk;endendcaseendassign out1=cnt/10;assign out2=cnt%10; 如果是assign赋值 out1和out2需要定义成wire类型endmodule交通灯程序应该还是蛮多的时间有限 以上注释仅供参考吧!!
2023-08-01 13:31:051

verilog语言程序问题,求大神来解答,奖励丰厚!8*8点阵问题

module a21(row,line,clk);input clk;output[0:7] row,line;reg[0:7] row,line;integer a,j,j1,i,i1;always @(posedge clk)beginif(i>9999999)beginj<=~j;i<=0;endelsei<=i+1; ---计数器endalways @(posedge clk)beginif(i1>9999)beginj1<=~j1; --生成时钟,一般不建议这样写i1<=0;endelsei1<=i1+1; ---计数器10000endalways@(posedge j) ---可以理解为状态机beginif(a>=3)a<=0;elsea<=a+1;endalways@(posedge j1)begincase(a)0:beginrow=8"b11100111;line=8"b00011000;end ----case里面这些就是根据不同的a值输出灯的高低电平 1:beginrow=8"b11000011;line=8"b00111100;end 2:beginrow=8"b10000001;line=8"b01111110;end 3:beginrow=8"b00000000;line=8"b11111111;endendcaseendendmodule
2023-08-01 13:31:122

有关C语言编程的题!急!!!

楼上会不会搜索啊?搜了这么个
2023-08-01 13:31:202

用verilog程序设计一个具有异步清零功能的24进制计数器

module counter_24 ( input clk, input rst, input cnt_in ,output reg cnt_out );reg [4:0] cnt;always @ (posedge clk or posedge rst_n) beginif (rst) cnt <= 5"b0;else if (~cnt_in) cnt <= cnt;else if (cnt == 5"b10110) cnt <= 5"b0;else cnt <= cnt + 1"b1;endalways @ (posedge clk or posedge rst) beginif (rst) cnt_out <= 1"b0;else if (cnt_in && cnt == 5"b10110) cnt_out <= 1"b1;else cnt_out <= 1"b0;endendmoduleinput add; //为1时加操作input dec; //为1时减操作output [5:0] counter;reg [5:0] counter;always @(add and dec) beginif(add && !dec) beginif(counter == 6"d38) begincounter <= 6"d0;扩展资料:有一种记数系统便是24进制的,其中1~24有专门的符号来表示,大于24的数便可以像24进制那样写成多位数,如tokaputokapuu014bgayepoko代表24进制中的P0(552)。malapu talusupuu014bga talu代表24进制中的H2G(9856)。为了避免混淆1和I,0和O,故跳过字母I、O,18~~23分别计作J、K、L、M、N、P。比如:16计作G、22计作N。等于或大于24的数字计作:24→10、25→11、26→12??25→11中标粗体的1代表24。同一个数字在不同的位置代表的值是不一样的。参考资料来源:百度百科-二十四进制
2023-08-01 13:31:291

Verilog 中的posedge用法是什么?为什么有这两个错误?

posedge一般都用于always@()的括号内,表示THR的上升沿到来时,运行always快内的程序。如果需要用到THR的上升沿来作为判断条件,建议你仔细点写代码。
2023-08-01 13:32:011

什么是高电平?

1、数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫作上升沿。硬件描述语言在Verilog等硬件描述语言中,用“posedge”表示“上升沿”。2、数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。硬件描述语言在Verilog等硬件描述语言中,用“negedge”表示“下降沿”。扩展资料控制器高电平与低电平区别1、控制器上标识的高低电平为刹车,高电平一般规定为5V以上,低电平为0V左右。2、在不同电路上的电压值不相同,如果是5V供电的数字电路,高电平就是5V,或接近5V。低电平就是‘无",就是0V或接近0V。3、控制器的高电平是通,低电平是控。参考资料来源:百度百科——高电平参考资料来源:百度百科——上升沿参考资料来源:百度百科——下降沿
2023-08-01 13:32:081

什么是高电平,什么是下降沿?

1、数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间(时刻)叫作上升沿。硬件描述语言在Verilog等硬件描述语言中,用“posedge”表示“上升沿”。2、数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。硬件描述语言在Verilog等硬件描述语言中,用“negedge”表示“下降沿”。扩展资料控制器高电平与低电平区别1、控制器上标识的高低电平为刹车,高电平一般规定为5V以上,低电平为0V左右。2、在不同电路上的电压值不相同,如果是5V供电的数字电路,高电平就是5V,或接近5V。低电平就是‘无",就是0V或接近0V。3、控制器的高电平是通,低电平是控。参考资料来源:百度百科——高电平参考资料来源:百度百科——上升沿参考资料来源:百度百科——下降沿
2023-08-01 13:32:211

语句always@(posedgeCLKornegedgeRST)表示含义为

语句always@(posedgeCLKornegedgeRST)表示含义为 A.在CLK的上升沿或者RST的下降沿执行操作B.在CLK的上升沿或者RST的下降沿执行操作C.在CLK的上升沿或者RST的上升沿执行操作D.在CLK的下降沿或者RST的下降沿执行操作E.在CLK的下降沿或者RST的上升沿执行操作F.在CLK的上升沿、RST的下降沿同时发生时执行操作G.在CLK的下降沿、RST的上升沿同时发生时执行操作H、在CLK的高电平或者RST的低电平执行操作正确答案:在CLK的上升沿或者RST的下降沿执行操作;在CLK的上升沿或者RST的下降沿执行操作
2023-08-01 13:32:351

verilog语法问题

我没见过这样的用法,但是我看到number_of_edges,应该是边沿的数目,repeat(number_of_edges) @( negedge clk)的意思应该是说经过number_of_edges个clk下降沿,同理,neg_clocks(3)的意思应该是经过三个clk下降沿之后,.......... 。 其实就是延迟,等同于#3.
2023-08-01 13:32:453

如何用verilog编写50MHZ分频到1MHZ的代码。急~~

50分频即可
2023-08-01 13:32:553

verilog 问题

我也遇到同样的错误,最后发现是后面的 if 前面忘了加 else !写C语言习惯了。
2023-08-01 13:33:052

关于quartus ii的一段英文帮助的翻译

这有点难度 。。加点分更多人来
2023-08-01 13:33:244

verilog中assign a=data; always @(posedge clk) begin b=data; end 为什么a的值比b的要早一个时钟周期

@(posedge clk)这表示等待一个事件(clk上升沿)的发生因此当data在clk上升沿发生变化(即data的变化是发生在clk上升沿这一事件之后)assign语句使a立即取得data的值而always执行到@(posedge clk)则会挂起 直到事件(下一个clk上升沿)发生 才继续执行后面的语句 因此b的赋值(不管阻塞还是非阻塞赋值都是)比a晚了一个时钟
2023-08-01 13:33:331

Verilog hdl 中always @(negedge clrn or posedge clk) 是什么意思?

negedge clrn 为:当clrn下降沿时触发posedge clk 为:当clk上升沿时触发合起来negedge clrn or posedge clk就是当clrn下降沿时触发或当clk上升沿时触发always @( )是关键词,意思就是当()里的内容发生时执行下面的程序
2023-08-01 13:33:432

verilog语法求助

你是不是错误提示:Error(10200):VerilogHDLConditionalStatementerrorat……:cannotmatchoperand(s)intheconditiontothecorrespondingedgesintheenclosingeventcontrolofthealwaysconstruct这是因为,你的“always@(posedgeclkornegedger_est)”表明在clk上升沿或r_est下降沿这两个敏感事件发生时always语句块得以触发;而always中的if条件语句必须至少有一个条件指向其中一个敏感事件(边界标识符);所以写成“if(r_est)else”就会出错。你可以把“always@(posedgeclkornegedger_est)”改为“always@(posedgeclkorposedger_est)”再编译试试,应该就没问题了。你右键该错误点击“Help”里是这么说的:CAUSE:InaconditionalstatementatthespecifiedlocationinaVerilogDesignFile(.v),youspecifiedaconditionthatQuartusIIIntegratedSynthesiscannotusetoclassifytheedgesintheenclosingalwaysconstruct"seventcontrol.Whenaneventcontrolcontainsmultipleedges,QuartusIIIntegratedSynthesisdistinguishestheasynchronouscontrolsignalsfromtheclockbyanalyzingtheconditionalstatementsinthealwaysconstruct.Forexample,thefollowingcodefragmentcontainsanalwaysconstructwhoseeventcontrolcontainsthreeedges---twoasynchronousresetsandaclock.always@(posedgeclkorposedgerst1orposedgerst2)beginif(rst1||rst2)q<=1"b0;elseq<=d;endQuartusIIIntegratedSynthesisusestheifconditiontoidentifythetwoasynchronousresetsand,byimplication,theclock.Foredgeclassification,QuartusIIIntegratedSynthesisrequiresthataconditionfallintooneoftwocategories.Itcanrefertoasingleedgeidentifier(tomatchposedgeevents)oritscomplement(tomatchnegedgeevents),forexample,rst1,!rst1,rst1==1"b1,rst1==1"b0.ItcanalsoORtwoormoreexpressionsthateachrefertoasingleedgeidentifieroritscomplement,forexample,(rst1||rst2),(!rst1||!rst2).Youcanreceivethiserrorifyourconditiontestsforthewrongpolarity,orifittestsforthevalueofavariablethatisnotanedgeintheeventcontrol.Forexample,tomatchaposedgerstevent,theconditionmustberstorrst=1"b1.Finally,youcanreceivethiserrorifyouareattemptingtouseasingleconditionexpressiontotestforbothanasynchronousreset/setandasynchronousreset/setcondition.Thefollowingcodefragmentcontainsanexampleofanillegalconditionexpression:always@(posedgeclkorposedgerst)beginif(rst||sync_rst)q<=1"b0;elseq<=d;endQuartusIIIntegratedSynthesisgeneratesthiserrormessagewhencompilingthisdesignbecauseitcannotmatchsync_rsttoanedgeonthesensitivitylist.其中关键的语句我摘译一下,不一定译得准确,不过大体意思我想你应该可以了解了:原因:……指定了一个条件,QuartusII综合器不能够将该条件用于在封闭的always结构的事件控制中对边界进行区分。当一个事件控制中包含多重边界,QuartusII综合器通过分析always结构中的条件语句来对时钟和异步控制信号加以区分。……QuartusII综合器采用if条件来鉴别两个异步reset信号,并隐含地鉴别了clock信号。为了分类的需要,QuartusII综合器需要有一个条件落入两个类别之一。它可以指向一个单独的边界标识符(以匹配posedge事件)或它的补语(以匹配negedge事件),例如,rst1,!rst1,rst1==1"b1,rst1==1"b0。它也可以是OR两个或的表达式,其中每一个指向一个单独的边界标识符或它的补语……当你的条件测试发现错误极性,或者它测试变量的值,但该值在事件控制中并不是一个边界时,你会接到这个错误。例如,为了匹配一个posedgerst事件,条件必须是rst或rst=1"b1。编译错误时多看看Help,讲得很详细~
2023-08-01 13:33:511

Error (10170): Verilog HDL syntax error at fdiv.v(2) near text "input"; expecting "

问题在于你的第一句后没有加分号,就是input前面 加分号 。修改后module fdiv(clk_in,out1,out2,out3) ;input clk_in; output reg out1,out2,out3; integer cnt1=0,cnt2=0; always@(posedge clk_in) begin if(cnt1<9) begin out2<=out2; cnt1=cnt1+1; endelse begin out2=~out2; cnt1=0; end end always@(posedge out2) begin if(cnt2<9) begin out3<=out3; cnt2=cnt2+1; end else begin out3=~out3; cnt2=0; end end endmodule
2023-08-01 13:33:581

verilog语言的三态双向驱动

inout [0:7] bidir ; //这个bidir 就是8位的输入.temp=temp+1; //这句语句是在让变量temp自加运算,temp加1,赋给自己; //相当于c语言的temp++
2023-08-01 13:34:063

fpga verilog的按键消抖问题

always@(posedge clk) beginkey_temp<=key_temp0;key_temp0<=key;end=============================这一段因为用的是非阻塞幅值<=,这样在第一个时钟key的最新值只能传到key_temp0,等到下个周期才能传到key_temp那里。这样如果key的值不能持续超过两个时钟,那么就不可能出现key_temp=key的情况出现。这样就能达到消抖的作用。想必下文肯定有相关判定按键有无有效的语句。====================================s1:if((key_temp[0]==0)&(key_temp==key_temp0)&(key_temp0!=key)) 这两段代码是什么意思呀?====================================if后面的这段意思只要条件同时满足:key_temp[0]==0、key_temp==key_temp0、key_temp0!=key才会跳转到状态s2,否则回到s1的状态。
2023-08-01 13:34:152

verilog HDL 当S信号发生变化时,产生一个脉冲。

……reg S_delay;output A;always@(posedge CLK) S_delay <= S;assign A = S ^ S_delay;……
2023-08-01 13:34:233

verilog分频

分出来的占空比不是一比一哦,先写出来1S的,其它几个就都一样了啊
2023-08-01 13:34:312

在用verilog编写三段式状态机的时候,我看网上很多地方都是提到格式如下:always @ (posedge clk or negedg

都用时序逻辑的话,功能上没有什么区别,只是速度会慢一半。第三段假如case里边用CS的话,与第二段要么相矛盾,要么多此一举。
2023-08-01 13:34:382

verilog语言“$hold(posedge clk ,D, &&& ~nrst,2)

一般出现在specify block中,它的意思是检测这个hold是否违例的前提是nrst为负。
2023-08-01 13:34:592

请大神注释一段verilog HDL的分频程序

module gen_divd(reset,clkin,clkout); input reset,clkin; output clkout; parameter divdWIDTH=1; //参数定义 parameter divdFACTOR=1; reg clkout; reg [divdWIDTH:0] cnt; //2位计数器,最大记到3 always @ (posedge reset or posedge clkin) if(reset) // 高电平复位 begin cnt<=0; //计数器清零 clkout<=0; //输出时钟清零 end else begin cnt<=cnt+1"b1; //计数开始,来一个上升沿记一次数 if(cnt==(divdFACTOR-1)) //当cnt等于1 begin cnt<=0; //计数器清零 clkout<=~clkout; //输出时钟翻转一次,就是简单的2分频//假设开始clkout时低电平,当cnt计数到1(clkin刚好一个周期)时,clkout就翻转,变成高电平,clkout一个周期,相当于clkin的2个周期,实现2分频 end endendmodule
2023-08-01 13:35:071