约翰尼德斌
分可以不给.但询问的态度要好一点.我是觉得,帮别人一小下能增加自己被帮的机会.不要把我们当作要分的.OK?如果你想理解这段话,我觉得我的回答足够了.我的回答的话不好理解的话,你可以继续问.这也说明,你试图理解我的回答了,是对我的一种尊重.像你这样"二楼不行啊,太简短了!"那像啥?考官大人?你要逐字翻译的话还是请高人吧.原因:在.v文件的条件语句中,你定义.....如果一个事件的控制条件包含混合的边沿.....总之,你会收到一个错误,如果你尝试用一个单独的条件表达式来同时测试异步的reset/set和异步reset/set的条件大体意思是说,always结构中的敏感信号(alwaysconstruct'seventcontrol)定义有问题,没法综合.比如说,always@(posedgeclkorposedgerst)beginif(rst||sync_rst)q<=1'b0;elseq<=d;end在rst的上升沿,if中的rst的值是不确定的.所以if语句运行的时候有问题.
sugar糖果君
请既懂英语又懂点儿verilog或vhdl语言的高手帮忙翻译一下以下内容:请既懂英语又懂点儿的Verilog或VHDL语言语言的高手帮忙翻译一下以下内容: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.原因:在上一个Verilog设计文件(。五)指定的位置条件语句,您指定一个条件,Quartus II软件集成的合成不能使用进行分类,在封闭总是兴建的事件控制的边缘。 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.当一个事件控制包含多个优势,Quartus II软件集成合成区别开来进行分析的时钟总是在条件语句构造异步控制信号。 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开始总是@(posedge时钟或posedge rst1或posedge rst2) if ( rst1 || rst2 )如果(rst1 | | rst2) q <= 1'b0; q“= 1'b0; else其他的 q <= d; q“=Ḏ;end末端Quartus II Integrated Synthesis uses the if condition to identify the two asynchronous resets and, by implication, the clock. Quartus II软件集成的综合使用,如果条件确定两个异步复位,并暗示,时钟。 For edge classification, Quartus II Integrated Synthesis requires that a condition fall into one of two categories.对于边分类,Quartus II软件集成的合成需要一分为两类一个条件下降。 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.它可以指一个边缘标识符(以匹配posedge活动)或它的补(以匹配negedge活动),例如,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).它也可以或两个或多个表达式,每个指向一个单一的边缘标识符或其补充,例如,(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.例如,要匹配posedge rst的情况下,条件必须是rst或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开始总是@(posedge时钟或posedge rst) if ( rst || sync_rst )如果(rst | | sync_rst) q <= 1'b0; q“= 1'b0; else其他的 q <= d; q“=Ḏ;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软件集成综合生成此错误消息当编译这个设计,因为它不能匹配sync_rst一个敏感表上的优势。 ACTION: Modify the condition(s) or the conditional statement(s) so that Quartus II Integrated Synthesis can properly classify the edges in the event control of the always construct.行动:修改条件(S)或有条件的声明(S),这样的Quartus II综合合成可适当分类在事件的边缘构造的始终控制。 For example, you could rewrite the previous example with the illegal synchronous reset test as follows:例如,你可以重写与非法同步复位考验前面的例子如下:always @ (posedge clk or posedge rst) begin开始总是@(posedge时钟或posedge rst)
喝茶的樱桃
表示等待的意思,即等待@后面的条件触发,可以理解成等待某个事件触发。 比如always @(clk),即等待clk=1触发,也就是等待时钟高电平出现,然后处理always后续的处理;处理完之后,因为always是一直处理的意思,即重新回到等待clk=1的状态,如此循环...
三万英尺001
用Verilog HDL实现I2C总线功能 2004-7-6 作者:天津科技大学电子信息与自动化学院 路永坤 来源:21IC中国电子网 被过滤广告 (华强电子世界网讯) 简述了I2C总线的特点;介绍了开发FPGA时I2C总线模块的设计思想;给出并解释了用Verilog HDL实现部分I2C总线功能的程序,以及I2C总线主从模式下的仿真时序图。 关键词:I2C总线 FPGA Verilog HDL 时序 开发FPGA时,利用EDA工具设计芯片实现系统功能已经成为支撑电子设计的通用平台,并逐步向支持系统级的设计方向发展。在软件设计过程中,越来越强调模块化设计。I2C总线是Philips公司推出的双向两线串行通讯标准,具有接口线少、通讯效率高等特点。把I2C总线设计成相应的模块,有利于相关FPCA的开发。 目前有一些介绍相关开发的资料,但都是利用VHDL语言或AHDL语言实现的。本文给出利用Verilog HDL语言设计的I2C总线模块。 1 I2C总线概述 I2C总线系统由两根总线即SCL(串行时钟)线和SDA(串行数据)线构成。这种总线可以设计成很多种通讯配置,但本文只讨论主从系统的应用。主器件控制总线通讯,开始/结束传送、发送信息并产生I2C系统时钟。在写操作过程中,从器件一旦被主控器件寻址,就执行特定的相应功能。在读操作过程中,主控器件从从器件那里获得数据。在整个主从传送过程中,所有的事件都通过主控器件的SCL时钟线达到同步。连到总线上的器件的接口形式必须是漏极开路或集电极开路输出状态。通过上拉电阻,使得两根总线在空闲的状态下都为高电平状态。因此I2C总线上具有线与功能,即总线上的所有器件都达到高电子状态时,I2C总线才能达到高电平状态,从而使总线上的高速器件和慢速器件工作同步。 在I2C协议中,从器件地址是一个唯一的7位地址。接下来是一个读写方向标志位,读状态是高电平、写状态是低电子。2 I2C模块的设计与实现 根据I2C协议中传输过程的特点,I2C模块可以划分为字节发送模块、字节接收模块、开始条件模块、停止条件模块。其中,字节发送模块、字节接收模块和停止条件模块为基本模块。在开始条件模块中,因为需要发送从器件地址,所以要调用字节发送模块。 下面给出用Verilog HDL语言实现字节发送模块的关键程序。相关变量的声明在此略去。程序在Max+PlusII环境下编译、调试、仿真。 assign en_sdao=tempen_sdao;//设置SDA三态输出使能 assign send_byte_over=tempsend_byte_over; assign NO_ACK=tempNO_ACK; assign sdao=tempsda; assign sclo=tempscl; always@(posedge send_byte_clk) begin case(send_byte_zt) sendbit 1: begin if(send_byte_num==0) begin shiftdata[7:0]=indata[7:0]; end shiftdata=shiftdata<<1; tempsda=shiftdata[8]; tempscl=1; //置SCL为高电平 send_byte_zt=delay_1; send_byte_num=send_byte_num+1; end delay_1: //延时三个周期 begin if(delay_counter>=2) begin send_byte_zt=sendbit2; delay_counter=0; end else begin delay_counter=delay_counter+1; send_byte_zt=send_byte_zt; end end sendbit2: begin tempsc1=0; //SCL置零 send_byte_zt=delay_2; end delay_2: //延时三个周期 begin if(delay_counter>=2) begin send_byte_zt=sendbit3; delay_counter=0; end else begin delay_counter=delay_counter+1; send_byte_zt=send_byte_zt; end end sendbit3: //判断是否字节中所有位都发送完毕 begin if(send_byte_num<=8) begin send_byte_zt=sendbit1; end else begin send_byte_zt=ForACK1; send_byte_num=0; end end ForACK1: begin tempsda=1; //释放数据线,等待应答信号 send_byte_zt=delay_ACK; end delay_ACK: //延时 begin if(delay_counter>=3) begin send_byte_zt=ForACK2; delay_counter=0; end else begin delay_counter=delay_counter+1; send_byte_zt=send_byte_zt; tempscl=1; end end ForACK2: begin send_byte_zt=AckYESNO; tempen_sdao=0; //输出SDA使能信号,控制sdao和sdai end AckYESNO: begin if(sdai) //如果应答信号sdai为1,NO_ACK置1 begin tempNO_ACK=1; //设置未应答标志信号 end tempsc1=0; //终止应答位 send_byte_zt=Finish_delay; end Finish_delay: //延时 begin if(delay_counter>=2) begin tempsend_byte_over=1; send_byte_zt=FinishACK1; delay_counter=0; end else begin delay_counter=delay_counter+1; send_byte_zt=send_byte_zt; end end FinishACK1: begin send_byte_zt=sendbit1; send_byte_num=0; end default: begin send_byte_zt=sendbit1; send_byte_num=0; end endcase end程序中sdao、sclo为输出信号,sdai为应答信号,en_sdao是对sdao和sdai进行切换的信号。I2C总线具有SDA和SCL两根信号线,所以在整个模块设计中,把sdao/sclo和sdai/scli作为两组信号。当需要向外部SDA信号线上输出信息时,sdao连到SDA信号线上;当需要从外部SDA信号线上读入信息时,置sdao成高阻态,sdai连到SDA信号线上。en_sdao信号作为这一过程的切换信号。在程序中定义了一些状态信号:NO_ACK、send_byte_over。其中,NO_ACK信号判断从器件是否对发送的信号给予了应答。send_byte_over信号判断字节是否传输完毕。这些信号可以传递给上一层设计模块,以控制程序的流程。为了使I2C总线能够有效地通讯,必须考虑信号的建立和保持时间,所以程序中设置了相应的延时部分。另外,在以clk为触发信号的过程模块中,定义send_byte_clk信号为时钟信号的两倍频信号,并加入字节发送模块使能信号start_send_byte控制模块工作于篇幅所限,略去该过程模块。 字节发送模块的仿真测试结果如图1所示。 根据I2C总线标准,利用Verilog HDL很容易实现字节接收模块、开始条件模块、停止条件模块这三个模块。图2是数据发送过程的仿真测试结果。从器件的7位地址为101011,向从器件发送的数据为00010111。aensclo和aensdao分别是sclo/scli和sdao/sdai的切换信号。 图3是数据接收过程的仿真测试结果。从器件的7位地址为0011001,从器件发送的数据为11111111。ensclo和ensdao分别是sclo/scli和sdao/sdai的切换信号。将图2和图3所模拟的I2C总线时序与I2C总线协议中相关要求进行比较,满足I2C总线的时序要求。 对各个模块进行多层次处理,形成I2C总线模块。 以该I2C总线模块为基础,编写FPGA与AT24C01A(ATMEL公司生产的E2PROM)的通讯程序。然后把相关程序下载到EPF10Kl0LC84-3中,与AT24C01A进行实际通讯实验,效果良好。
优质英语培训问答知识库