📄 ec66 中国电子技术信息网 - 中文版verilog hdl简明教程(4).htm
字号:
<TD height=20><FONT color=#f3f3f3>
<P align=center>2003-9-4</FONT></P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 width=150 border=0>
<TBODY>
<TR>
<TD height=20><FONT color=#ffffff>相关文章:</FONT> </TD></TR>
<TR>
<TD height=20>
<DIV align=center><A
href="http://www.ec66.com/article/list.asp?indexid=604"><FONT
color=#ffffff>Verilog HDL网上资源</FONT></A><BR><A
href="http://www.ec66.com/article/list.asp?indexid=603"><FONT
color=#ffffff>中文版Verilog HDL简明教程(5)</FONT></A><BR><A
href="http://www.ec66.com/article/list.asp?indexid=601"><FONT
color=#ffffff>中文版Verilog HDL简明教程(3)</FONT></A><BR><A
href="http://www.ec66.com/article/list.asp?indexid=600"><FONT
color=#ffffff>中文版Verilog
HDL简明教程(1、2)</FONT></A><BR></DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 width=150 border=0>
<TBODY>
<TR>
<TD height=20></TD></TR>
<TR>
<TD height=20>
<P align=center><FONT color=#ffffff>==关于文章版权==</FONT></P></TD></TR>
<TR>
<TD height=20><FONT
color=#ffffff><BR>“本站”本站站主原创文章,未经本人(帝国老手/aoe)许可其他媒体一律不得转载。<BR><BR>“本站整理”本站站主根据个人见解及他人经验总结整理的文章,其他媒体转载必须标明出处为我站。<BR><BR>“某单位或个人”全文转载来自网络上的文章,其他媒体转载与我站无关。<BR><BR>“未知”(1)来自网络,由于来源混乱,无从考证作者,其他媒体转载与我站无关。<BR><BR>“未知”(2)其文章也是本站站主原创的,只所以标注“未知”,主要是因为引用文字过多或其他原因。建议其他媒体转载标明出处为我站。<BR><BR>我站版权请标注:“www.EC66.com”或“中国电子技术信息网”字样。</FONT></TD></TR>
<TR>
<TD height=20></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top width=600 height=240>
<TABLE height=20 cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD bgColor=#5b9595> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD bgColor=#aecece height=20>
<DIV align=center><FONT color=#0a52d8><B>中文版Verilog
HDL简明教程(4)</B></FONT> </DIV></TD></TR>
<TR>
<TD width=600>〖文章转载或出处〗≡中国电子技术信息网≡ 网址:www.EC66.com</TD></TR>
<TR>
<TD
width=600>中文版Verilog HDL简明教程:第4章 表 达 式 <BR><BR> <BR> 本章讲述在Verilog HDL中编写表达式的基础。<BR> 表达式由操作数和操作符组成。表达式可以在出现数值的任何地方使用。<BR><BR>4.1 操作数<BR><BR> 操作数可以是以下类型中的一种:<BR> 1) 常数<BR> 2) 参数<BR> 3) 线网<BR> 4) 寄存器<BR> 5) 位选择<BR> 6) 部分选择 <BR> 7) 存储器单元<BR> 8) 函数调用<BR><BR>4.1.1 常数<BR><BR> 前面的章节已讲述了如何书写常量。下面是一些实例。<BR><BR>256,7 //非定长的十进制数。<BR>4'b10_11, 8'h0A //定长的整型常量。<BR>'b1, 'hFBA //非定长的整数常量。<BR>90.00006 //实数型常量。<BR>"BOND" //串常量;每个字符作为8位ASCII值存储。<BR><BR> 表达式中的整数值可被解释为有符号数或无符号数。如果表达式中是十进制整数,例如,12被解释为有符号数。如果整数是基数型整数(定长或非定长),那么该整数作为无符号数对待。下面举例说明。<BR><BR>12是01100的5位向量形式(有符号)<BR>-12是10100的5位向量形式(有符号)<BR>5'b01100是十进制数12(无符号)<BR>5'b10100是十进制数20(无符号)<BR>4'd12是十进制数12(无符号)<BR><BR> 更为重要的是对基数表示或非基数表示的负整数处理方式不同。非基数表示形式的负整数作为有符号数处理,而基数表示形式的负整数值作为无符号数。因此-44和-6'o54 (十进制的44等于八进制的54)在下例中处理不同。<BR><BR>integer Cone;<BR>. . .<BR>Cone = -44/4<BR>Cone = -6'o54/ 4;<BR><BR> 注意-44和-6'o54以相同的位模式求值;但是-44作为有符号数处理,而-6'o54作为无符号数处理。因此第一个字符中Cone的值为-11,而在第二个赋值中Cone的值为1073741813。<BR><BR>4.1.2 参数<BR><BR> 前一章中已对参数作了介绍。参数类似于常量,并且使用参数声明进行说明。下面是参数说明实例。<BR><BR>parameter LOAD = 4'd12, STORE = 4'd10;<BR>LOAD 和STORE为参数的例子,值分别被声明为12和10。<BR><BR>4.1.3 线网<BR><BR> 可在表达式中使用标量线网(1位)和向量线网(多位)。下面是线网说明实例。<BR><BR>wire [0:3] Prt; //Prt 为4位向量线网。<BR>wire Bdq; //Bbq 是标量线网。<BR><BR> 线网中的值被解释为无符号数。在连续赋值语句中,<BR><BR>assign Prt = -3;<BR>Prt被赋于位向量1101,实际上为十进制的13。在下面的连续赋值中,<BR>assign Prt = 4'HA;<BR>Prt被赋于位向量1010,即为十进制的10。<BR><BR>4.1.4 寄存器<BR><BR> 标量和向量寄存器可在表达式中使用。寄存器变量使用寄存器声明进行说明。例如:<BR><BR>integer TemA, TemB;<BR>reg [1:5] State;<BR>time Que [1:5];<BR><BR> 整型寄存器中的值被解释为有符号的二进制补码数,而reg寄存器或时间寄存器中的值被解释为无符号数。实数和实数时间类型寄存器中的值被解释为有符号浮点数。<BR><BR>TemA = -10; //TemA值为位向量10110,是10的二进制补码。<BR>TemA = 'b1011; //TemA值为十进制数11。<BR><BR>State = -10; //State值为位向量10110,即十进制数22。<BR>State = 'b1011; //State值为位向量01011,是十进制值11。<BR><BR>4.1.5 位选择<BR><BR> 位选择从向量中抽取特定的位。形式如下:<BR><BR>net_or_reg_vector [bit_select_expr]<BR><BR> 下面是表达式中应用位选择的例子。<BR><BR>State [1] && State [4] //寄存器位选择。<BR>Prt [0] | Bbq //线网位选择。<BR><BR> 如果选择表达式的值为x、z,或越界,则位选择的值为x。例如State [x]值为x。<BR><BR>4.1.6 部分选择<BR><BR> 在部分选择中,向量的连续序列被选择。形式如下:<BR><BR>net_or_reg_vector [msb_const_expr:1sb_const_expr]<BR><BR> 其中范围表达式必须为常数表达式。例如。<BR><BR>State [1:4] //寄存器部分选择。<BR>Prt [1:3] //线网部分选择。<BR>选择范围越界或为x、z时,部分选择的值为x。<BR><BR>4.1.7 存储器单元<BR><BR> 存储器单元从存储器中选择一个字。形式如下:<BR><BR>memory [word_address]<BR><BR>例如:<BR>reg [1:8] Ack, Dram [0:63];<BR>. . . <BR>Ack = Dram [60]; //存储器的第60个单元。<BR><BR> 不允许对存储器变量值部分选择或位选择。例如,<BR><BR>Dram [60] [2] 不允许。<BR>Dram [60] [2:4] 也不允许。<BR><BR> 在存储器中读取一个位或部分选择一个字的方法如下:将存储器单元赋值给寄存器变量,然后对该寄存器变量采用部分选择或位选择操作。例如,Ack [2] 和Ack [2:4]是合法的表达式。<BR><BR>4.1.8 函数调用<BR><BR> 表达式中可使用函数调用。函数调用可以是系统函数调用(以$字符开始)或用户定义的函数调用。例如:<BR><BR>$time + SumOfEvents (A, B)<BR>/*$time是系统函数,并且SumOfEvents是在别处定义的用户自定义函数。*/<BR><BR>4.2 操作符<BR><BR> Verilog HDL中的操作符可以分为下述类型:<BR><BR> 1) 算术操作符<BR> 2) 关系操作符<BR> 3) 相等操作符<BR> 4) 逻辑操作符<BR> 5) 按位操作符<BR> 6) 归约操作符<BR> 7) 移位操作符<BR> 8) 条件操作符<BR> 9) 连接和复制操作符<BR><BR> 下表显示了所有操作符的优先级和名称。操作符从最高优先级(顶行)到最低优先级(底行)排列。同一行中的操作符优先级相同。<BR> 除条件操作符从右向左关联外,其余所有操作符自左向右关联。下面的表达式:<BR><BR>A + B - C<BR>等价于:<BR>(A + B ) - C //自左向右<BR>而表达式:<BR>A ? B : C ? D : F<BR>等价于:<BR>A ? B : (C ? D : F) //从右向左<BR>圆扩号能够用于改变优先级的顺序,如以下表达式:<BR>(A ? B : C) ? D : F<BR><BR>4.2.1 算术操作符<BR><BR> 算术操作符有:<BR><BR>* +(一元加和二元加)<BR>* -(一元减和二元减)<BR>* *(乘)<BR>* /(除)<BR>* %(取模)<BR><BR> 整数除法截断任何小数部分。例如:<BR><BR>7/4 结果为 1<BR>取模操作符求出与第一个操作符符号相同的余数。<BR>7%4 结果为 3<BR>而:<BR>- 7%4 结果为 -3<BR><BR> 如果算术操作符中的任意操作数是X或Z,那么整个结果为X。例如:<BR><BR>'b10x1 + 'b01111 结果为不确定数'bxxxxx<BR><BR>1. 算术操作结果的长度<BR> 算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。考虑如下实例:<BR><BR>reg [0:3] Arc, Bar, Crt;<BR>reg [0:5] Frx;<BR>. . . <BR>Arc = Bar + Crt;<BR>Frx = Bar + Crt;<BR><BR> 第一个加的结果长度由Bar,Crt和Arc长度决定,长度为4位。第二个加法操作的长度同样由Frx的长度决定(Frx、Bat和Crt中的最长长度),长度为6位。在第一个赋值中,加法操作的溢出部分被丢弃;而在第二个赋值中,任何溢出的位存储在结果位Frx[1]中。<BR> 在较大的表达式中,中间结果的长度如何确定?在Verilog HDL中定义了如下规则:表达式中的所有中间结果应取最大操作数的长度(赋值时,此规则也包括左端目标)。考虑另一个实例:<BR><BR>wire [4:1] Box, Drt;<BR>wire [1:5] Cfg;<BR>wire [1:6] Peg;<BR>wire [1:8] Adt;<BR>. . .<BR>assign Adt = (Box + Cfg) + (Drt + Peg);<BR><BR> 表达式左端的操作数最长为6,但是将左端包含在内时,最大长度为8。所以所有的加操作使用8位进行。例如:Box和Cfg相加的结果长度为8位。<BR><BR>2. 无符号数和有符号数<BR> 执行算术操作和赋值时,注意哪些操作数为无符号数、哪些操作数为有符号数非常重要。无符号数存储在:<BR>* 线网<BR>* 一般寄存器<BR>* 基数格式表示形式的整数<BR> 有符号数存储在:<BR>* 整数寄存器<BR>* 十进制形式的整数<BR> 下面是一些赋值语句的实例:<BR><BR>reg [0:5] Bar;<BR>integer Tab;<BR>. . .<BR>Bar = -4'd12; //寄存器变量Bar的十进制数为52,向量值为110100。<BR>Tab = -4'd12; //整数Tab的十进制数为-12,位形式为110100。<BR><BR>-4'd12 / 4 //结果是1073741821。<BR>-12 / 4 //结果是-3<BR><BR> 因为Bar是普通寄存器类型变量,只存储无符号数。右端表达式的值为'b110100(12的二进制补码)。因此在赋值后,Bar存储十进制值52。在第二个赋值中,右端表达式相同,值为'b110100,但此时被赋值为存储有符号数的整数寄存器。Tab存储十进制值-12(位向量为110100)。注意在两种情况下,位向量存储内容都相同;但是在第一种情况下,向量被解释为无符号数,而在第二种情况下,向量被解释为有符号数。<BR> 下面为具体实例:<BR><BR>Bar = - 4'd12/4;<BR>Tab = - 4'd12 /4;<BR><BR>Bar = - 12/4<BR>Tab = - 12/4<BR><BR> 在第一次赋值中,Bar被赋于十进制值61(位向量为111101)。而在第二个赋值中,Tab被赋于与十进制1073741821(位值为0011...11101)。Bar在第三个赋值中赋于与第一个赋值相同的值。这是因为Bar只存储无符号数。在第四个赋值中,Bar被赋于十进制值-3。<BR> 下面是另一些例子:<BR><BR>Bar = 4 - 6;<BR>Tab = 4 - 6;<BR>Bar被赋于十进制值62(-2的二进制补码),而Tab被赋于十进制值-2(位向量为111110)。<BR><BR> 下面为另一个实例:<BR><BR>Bar = -2 + (-4);<BR>Tab = -2 + (-4);<BR>Bar被赋于十进制值58(位向量为111010),而Tab被赋于十进制值-6(位向量为111010)。<BR><BR>4.2.2 关系操作符<BR><BR> 关系操作符有:<BR><BR>* >(大于)<BR>* <(小于)<BR>* >=(不小于)<BR>* <=(不大于)<BR><BR> 关系操作符的结果为真(1)或假(0)。如果操作数中有一位为X或Z,那么结果为X。例如:<BR><BR>23 > 45<BR>结果为假(0),而:<BR>52< 8'hxFF<BR>结果为x。如果操作数长度不同,长度较短的操作数在最重要的位方向(左方)添0补齐。例如:<BR>'b1000 > = 'b01110<BR>等价于:<BR>'b01000 > = 'b01110<BR>结果为假(0)。 <BR><BR>4.2.3 相等关系操作符<BR><BR> 相等关系操作符有:<BR><BR>* = =(逻辑相等)<BR>* !=(逻辑不等)<BR>* = = =(全等)<BR>* != =(非全等)<BR><BR> 如果比较结果为假,则结果为0;否则结果为1。在全等比较中,值x和z严格按位比较。也就是说,不进行解释,并且结果一定可知。而在逻辑比较中,值x和z具有通常的意义,且结果可以不为x。也就是说,在逻辑比较中,如果两个操作数之一包含x或z,结果为未知的值(x)。<BR> 如下例,假定:<BR><BR>Data = 'b11x0;<BR>Addr = 'b11x0;<BR>那么:<BR>Data = = Addr<BR>不定,也就是说值为x,但:<BR>Data = = = Addr<BR>为真,也就是说值为1。<BR><BR> 如果操作数的长度不相等,长度较小的操作数在左侧添0补位,例如:<BR><BR>2'b10 = = 4'b0010<BR>与下面的表达式相同:<BR>4'b0010 = = 4'b0010<BR>结果为真(1)。<BR><BR>4.2.4 逻辑操作符<BR><BR> 逻辑操作符有:<BR><BR>* && (逻辑与)<BR>* || (逻辑或) <BR>* !(逻辑非)<BR><BR> 这些操作符在逻辑值0或1上操作。逻辑操作的结构为0或1。例如, 假定: <BR><BR>Crd = 'b0; //0为假<BR>Dgs = 'b1; //1为真<BR>那么:<BR>Crd && Dgs 结果为0 (假)<BR>Crd || Dgs 结果为1 (真)<BR>! Dgs 结果为0 (假)<BR>对于向量操作, 非0向量作为1处理。例如,假定:<BR>A_Bus = 'b0110;<BR>B_Bus = 'b0100;<BR>那么:<BR>A_Bus || B_Bus 结果为1<BR>A_Bus && B_Bus 结果为 1<BR>并且:<BR>! A_Bus 与! B_Bus的结果相同。<BR>结果为0。<BR>如果任意一个操作数包含x,结果也为x。<BR>!x 结果为x<BR><BR>4.2.5 按位操作符<BR><BR> 按位操作符有:<BR><BR>* ~(一元非)<BR>* &(二元与)<BR>* |(二元或)<BR>* ^(二元异或)<BR>* ~^, ^~(二元异或非)<BR><BR> 这些操作符在输入操作数的对应位上按位操作,并产生向量结果。下表显示对于不同操作符按步操作的结果。<BR><BR> 例如,假定,<BR>A = 'b0110;<BR>B = 'b0100;<BR>那么:<BR>A | B 结果为0110<BR>A & B 结果为0100<BR>如果操作数长度不相等, 长度较小的操作数在最左侧添0补位。例如,<BR>'b0110 ^ 'b10000<BR>与如下式的操作相同: <BR>'b00110 ^ 'b10000<BR>结果为'b10110。<BR><BR>4.2.6 归约操作符<BR><BR> 归约操作符在单一操作数的所有位上操作,并产生1位结果。归约操作符有:<BR><BR>* & (归约与)<BR>如果存在位值为0, 那么结果为0;若如果存在位值为x或z,结果为x;否则结果为1。<BR>* ~& (归约与非)<BR>与归约操作符&相反。<BR>* | (归约或)<BR>如果存在位值为1,那么结果为1;如果存在位x或z,结果为x;否则结果为0。<BR>* ~| (归约或非)<BR>与归约操作符|相反。<BR>* ^ (归约异或)<BR>如果存在位值为x或z,那么结果为x;否则如果操作数中有偶数个1, 结果为0;否则结果为1。<BR>* ~^ (归约异或非)<BR>与归约操作符^正好相反。<BR>如下所示。假定,<BR>A = 'b0110;<BR>B = 'b0100;<BR>那么:<BR>|B 结果为1<BR>& B 结果为0<BR>~ A 结果为1<BR>归约异或操作符用于决定向量中是否有位为x。假定,<BR>MyReg = 4'b01x0;<BR>那么:<BR>^MyReg 结果为x<BR> 上述功能使用如下的if语句检测:<BR><BR>if (^MyReg = = = 1'bx)<BR>$ display ("There is an unknown in the vector MyReg !")<BR><BR>注意逻辑相等(==)操作符不能用于比较;逻辑相等操作符比较将只会产生结果x。全等操作符期望的结果为值1。<BR><BR>4.2.7 移位操作符<BR><BR> 移位操作符有:<BR><BR>* << (左移)<BR>* >> (右移)<BR><BR> 移位操作符左侧操作数移动右侧操作数表示的次数,它是一个逻辑移位。空闲位添0补位。如果右侧操作数的值为x或z, 移位操作的结果为x。假定:<BR><BR>reg [0:7] Qreg;<BR>. . .<BR>Qreg = 4'b0111;<BR>那么:<BR>Qreg >> 2 是 8'b0000_0001<BR><BR> Verilog HDL中没有指数操作符。但是,移位操作符可用于支持部分指数操作。例如,如果要计算ZNumBits的值,可以使用移位操作实现,例如:<BR><BR>32'b1 << NumBits //NumBits必须小于32。<BR>同理,可使用移位操作为2-4解码器建模,如<BR>wire [0:3] DecodeOut = 4'b1 << Address [0:1];<BR>Address[0:1] 可取值0,1,2和3。与之相应,DecodeOut可以取值4'b0001、4'b0010、4'b0100和4'b1000,从而为解码器建模。<BR><BR>4.2.8 条件操作符<BR><BR> 条件操作符根据条件表达式的值选择表达式,形式如下:<BR><BR>cond_expr ? expr1 : expr2<BR><BR>如果cond_expr 为真(即值为1),选择expr1;如果cond_expr为假(值为0),选择expr2。 如果cond_expr 为x或z,结果将是按以下逻辑expr1和expr2按位操作的值: 0与0得0,1与1得1,其余情况为x。<BR>如下所示:<BR><BR>wire [0:2] Student = Marks > 18 ? Grade_A : Grade_C;<BR><BR>计算表达式Marks > 18; 如果真, Grade_A 赋值为Student; 如果Marks < =18, Grade_C 赋值为Student。下面为另一实例:<BR><BR>always<BR>#5 Ctr = (Ctr != 25) ? (Ctr + 1) : 5;<BR>过程赋值中的表达式表明如果Ctr不等于25, 则加1;否则如果Ctr值为25时, 将Ctr值重新置为5。<BR><BR>4.2.9 连接和复制操作<BR><BR> 连接操作是将小表达式合并形成大表达式的操作。形式如下:<BR><BR>{expr1, expr2, . . .,exprN}<BR><BR> 实例如下所示:<BR><BR>wire [7:0] Dbus;<BR>wire [11:0] Abus;<BR><BR>assign Dbus [7:4] = {Dbus [0], Dbus [1], Dbus[2], Dbus[3]};<BR>//以反转的顺序将低端4位赋给高端4位。<BR>assign Dbus = {Dbus [3:0], Dbus [7:4]};<BR>//高4位与低4位交换。<BR>由于非定长常数的长度未知, 不允许连接非定长常数。例如, 下列式子非法:<BR>{Dbus,5} //不允许连接操作非定长常数。<BR>复制通过指定重复次数来执行操作。形式如下:<BR>{repetition_number {expr1, expr2, ...,exprN}}<BR>以下是一些实例:<BR>Abus = {3{4'b1011}}; //位向量12'b1011_1011_1011)<BR>Abus = {{4{Dbus[7]}}, Dbus}; /*符号扩展*/<BR>{3{1'b1}} 结果为111<BR>{3{Ack}} 结果与{Ack, Ack, Ack}相同。<BR><BR>4.3 表达式种类<BR><BR> 常量表达式是在编译时就计算出常数值的表达式。通常,常量表达式可由下列要素构成:<BR> 1) 表示常量文字, 如'b10和326。<BR> 2) 参数名,如RED的参数表明:<BR><BR>parameter RED = 4'b1110;<BR><BR> 标量表达式是计算结果为1位的表达式。如果希望产生标量结果, 但是表达式产生的结果为向量, 则最终结果为向量最右侧的位值。<BR><BR>习题<BR><BR>1. 说明参数GATE_DELAY, 参数值为5。<BR>2. 假定长度为64个字的存储器, 每个字8位,编写Verilog 代码,按逆序交换存储器的内容。即将第0个字与第63个字交换,第1个字与第62个字交换,依此类推。<BR>3. 假定32位总线Address_Bus, 编写一个表达式,计算从第11位到第20位的归约与非。<BR>4. 假定一条总线Control_Bus [15:0],编写赋值语句将总线分为两条总线:Abus [0:9]和Bbus [6:1]。<BR>5. 编写一个表达式,执行算术移位,将Qparity 中包含的8位有符号数算术移位。<BR>6. 使用条件操作符, 编写赋值语句选择NextState的值。如果CurrentState的值为RESET, 那么NextState的值为GO;如果CurrentState的值为GO,则NextState 的值为BUSY;如果CurrentState的值为BUSY;则NextState的值为RESET。<BR>7. 如何从标量变量A,B,C和D中产生总线BusQ[0:3]? 如何从两条总线BusA [0:3]和BusY [20:15]形成新的总线BusR[10:1]?<BR> </TD></TR>
<TR>
<TD width=600></TD></TR>
<TR>
<TD width=600><B>郑重声明</B><BR>
近年来我站数百篇“原创文章”被一些媒体肆意转载,不但不标明出自“中国电子技术信息网”,而且把相关字眼删除!这是无视技术价值的盗窃行为,是对技术人员辛勤劳动的蔑视,我对此种行为表示强烈的谴责。<BR>
“本是同根生,相煎何太急”,考虑到我们做技术的都是同门兄弟,对以前的盗窃行为不再追究,今后再有此类事件,最低处理限度是“明示于天下”。在这里向转载过又标注了出处的兄弟媒体表示崇高的敬意!<BR>
兄弟网站如果引用本站“原创文章”,请首先经本人许可,并标注“www.EC66.com”或“中国电子技术信息网”字样。<BR>
欢迎个人下载使用!</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR></DIV>
<DIV align=center>
<P
align=center>本站所载文章力求原创,部分资料转自网上,转载文章均注明出处。<BR>假如您认为某些文章侵犯了您的权益,请告知我们,我们将在最短的时间内删除有关文章。<BR>如果您对文章内容有任何心得或异议,请到<A
href="http://www.ecbbs.com/" target=_blank><FONT
color=red>技术论坛</FONT></A>发表高见!</P>
<P align=center>中国电子技术信息网 文章管理系统由:Aoe 制作<BR>Copyright (C) 2001-2006 EC66.COM All
Rights Reserved</P></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -