关于8位串行乘法器的缺点,书上还提到一点,就是速度慢。具体分析串行乘法器的硬件结构,也就是存在逐步进位信号的传递所造成的延迟,就8位串行乘法器来说,请看如下的仿真图。
在此,笔者特意将2个变量,乘数与被乘数变化设定为8个时钟周期,这样,就可以清晰的看到并推得,N位串行乘法器由于其移位运算的需要,将有N个时钟延迟,即所谓的速度慢。
另外,需要注意的是,与C/C++语言类似,计数变量(此情况下用count计下8个时钟周期)和状态变量(用于case语句中不同情况)都需要给定初值,否则会出现不可预知的错误。仿真代码见下,供参考:
module ade_test; // Inputs reg clk; reg [7:0] x; reg [7:0] y; // Outputs wire [15:0] p; // Instantiate the Unit Under Test (UUT) ade uut ( .clk(clk), .x(x), .y(y), .p(p) ); parameter clk_period = 20; initial begin // Initialize Inputs clk = 0; x = 0; y = 0; // Wait 100 ns for global reset to finish //#100; // x = 2; //y = 3; // Add stimulus here end always # (clk_period/2) clk = ~clk; always # (clk_period*8) x = (x+3) % 10; always # (clk_period*8) y = (y+1) % 15; endmodule