正在加载图片...
Chinaopub.com 第2章建实例145 下载 126通用移位寄存器 通用串行输入、串行输出移位寄存器能够使用 al ways语句块内的for循环语句建模。寄 存器的数量被定义为参数,这样通用移位寄存器的数量在其他设计中被引用时,可以修 改。 module shift Reg (D, Clock, 4 input D, Clock i parameter NUM REG=6 reg [1: NUM REG]o integer P e(negedge Clock) begi //寄存器右移一位: for (P l; P NUM REG; P=P 1 Q[P+1]=Q[P] 载串行数据 /从最右端寄存器获取输出: assign Z =9 [NUM REG] endmodule 以通过用不同的参数值引用模块 Shift Reg获取不同长度的移位寄存器 module Dummy wire Data, Cik, Za, Zb, 2ci //6位移位寄存器: Shift Reg SRA(Da ta, Cik, 24 //4位移位寄存器: Shift Reg #4 SRB (Da ta, cik, 2D //10位移位寄存器: Shift Reg #10 SRC (Da ta, Clk, 24 endmodule 127状态机建模 状态机通常可使用带有 always语句的case语句建模。状态信息存储在寄存器中。case语句 的多个分支包含每个状态的行为。下面是表示状态机简单乘法算法的实例。当 Reset信号为高 时,累加器Ac和计数器Coun被初始化。当Rese变为低时,乘法开始运算。如果乘数Mpl在 Count位的值为1,被乘数加到累加器上。然后,被乘数左移1位且计数器加1。如果Cout是16, 乘法运算完成,并且 Donet信号被置为高。如若不然,检查乘数Mplr的Coum位,并重复 always 语句。状态图如图12-10所示,其后是相应的状态机模型。12.6 通用移位寄存器 通用串行输入、串行输出移位寄存器能够使用 a l w a y s语句块内的 f o r循环语句建模。寄 存器的数量被定义为参数,这样通用移位寄存器的数量在其他设计中被引用时,可以修 改。 m o d u l e S h i f t _ R e g (D, Clock, Z) ; i n p u t D, Clock; o u t p u t Z; p a r a m e t e r NUM_REG = 6, r e g [1: N U M _ R E G ] Q; i n t e g e r P; a l w a y s @ (n e g e d g e C l o c k) b e g i n / /寄存器右移一位: for (P = 1; P< N U M _ R E G; P = P + 1) Q[P+1] = Q[P] ; / /加载串行数据: Q[1] = D; e n d / /从最右端寄存器获取输出: a s s i g n Z = Q [NUM_REG]; e n d m o d u l e 可以通过用不同的参数值引用模块 S h i f t _ R e g获取不同长度的移位寄存器。 m o d u l e D u m m y; w i r e Data, Clk, Za, Zb, Zc; / / 6位移位寄存器: Shift_Reg SRA (Data, Clk, Za) ; / / 4位移位寄存器: Shift_Reg # 4 SRB (Data, Clk, Zb) ; / / 1 0位移位寄存器: Shift_Reg #10 SRC (Data, Clk, Zc) ; e n d m o d u l e 12.7 状态机建模 状态机通常可使用带有 a l w a y s语句的c a s e语句建模。状态信息存储在寄存器中。 c a s e语句 的多个分支包含每个状态的行为。下面是表示状态机简单乘法算法的实例。当 R e s e t信号为高 时,累加器A c c和计数器C o u n t被初始化。当R e s e t变为低时,乘法开始运算。如果乘数 M p l r在 C o u n t位的值为1,被乘数加到累加器上。然后,被乘数左移1位且计数器加1。如果C o u n t是1 6, 乘法运算完成,并且D o n e信号被置为高。如若不然,检查乘数 M p l r的C o u n t位,并重复a l w a y s 语句。状态图如图1 2 - 1 0所示,其后是相应的状态机模型。 第12章 建 模 实 例 145 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有