谁能给我讲明白这段代码。。。。。Verilog—HDL的。。。。
modulemulti_4bits(mul_a,mul_b,clk,clr,mul_out);input[3:0]mul_a,mul_b;inputclk;inputcl...
module multi_4bits(mul_a, mul_b, clk, clr, mul_out);
input [3:0] mul_a, mul_b;
input clk;
input clr;
output [7:0] mul_out;
reg [7:0] mul_out;
reg [7:0] stored0;
reg [7:0] stored1;
reg [7:0] stored2;
reg [7:0] stored3;
reg [7:0] add01;
reg [7:0] add23;
always @(posedge clk or negedge clr) begin
if(!clr) begin
mul_out <= 0;
stored0 <= 0;
stored1 <= 0;
stored2 <= 0;
stored3 <= 0;
add01 <= 0;
add23 <= 0;
end
else begin
stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0;
stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0;
stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0;
stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0;
add01 <= stored1 + stored0;
add23 <= stored3 + stored2;
mul_out <= add01 + add23;
end
end
endmodule 展开
input [3:0] mul_a, mul_b;
input clk;
input clr;
output [7:0] mul_out;
reg [7:0] mul_out;
reg [7:0] stored0;
reg [7:0] stored1;
reg [7:0] stored2;
reg [7:0] stored3;
reg [7:0] add01;
reg [7:0] add23;
always @(posedge clk or negedge clr) begin
if(!clr) begin
mul_out <= 0;
stored0 <= 0;
stored1 <= 0;
stored2 <= 0;
stored3 <= 0;
add01 <= 0;
add23 <= 0;
end
else begin
stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0;
stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0;
stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0;
stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0;
add01 <= stored1 + stored0;
add23 <= stored3 + stored2;
mul_out <= add01 + add23;
end
end
endmodule 展开
1个回答
展开全部
module multi_4bits(mul_a, mul_b, clk, clr, mul_out);
input [3:0] mul_a, mul_b; ----两个4位二进制数
input clk; ----输入时 钟
input clr; ----清零信号
output [7:0] mul_out; -----输出数据 8位
reg [7:0] mul_out;
reg [7:0] stored0;
reg [7:0] stored1;
reg [7:0] stored2;
reg [7:0] stored3;
reg [7:0] add01;
reg [7:0] add23;
always @(posedge clk or negedge clr) begin
if(!clr) begin --如果清零信号作用 所有清零
mul_out <= 0;
stored0 <= 0;
stored1 <= 0;
stored2 <= 0;
stored3 <= 0;
add01 <= 0;
add23 <= 0;
end
else begin
stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0; -- b的0位上的数 与mul_a相乘 结果 如果 b(0) 为1 stored0 即 高四位为0000 低4位为mul_a 如果b(0)为0 则 结果全部为0即 00000000
stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0;同上,b(1)与mul_a相乘的结果 结果类似
stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0;
stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0;
add01 <= stored1 + stored0;
add23 <= stored3 + stored2;
mul_out <= add01 + add23; 将结果相加
end
end
endmodule -----总结 就是 四位二进制 乘法, 可以结合 小学数学 四位数乘法,把其中一个四位数分为 个十百千 分别与另外一乘数相乘然后再相加的方式考虑。
input [3:0] mul_a, mul_b; ----两个4位二进制数
input clk; ----输入时 钟
input clr; ----清零信号
output [7:0] mul_out; -----输出数据 8位
reg [7:0] mul_out;
reg [7:0] stored0;
reg [7:0] stored1;
reg [7:0] stored2;
reg [7:0] stored3;
reg [7:0] add01;
reg [7:0] add23;
always @(posedge clk or negedge clr) begin
if(!clr) begin --如果清零信号作用 所有清零
mul_out <= 0;
stored0 <= 0;
stored1 <= 0;
stored2 <= 0;
stored3 <= 0;
add01 <= 0;
add23 <= 0;
end
else begin
stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0; -- b的0位上的数 与mul_a相乘 结果 如果 b(0) 为1 stored0 即 高四位为0000 低4位为mul_a 如果b(0)为0 则 结果全部为0即 00000000
stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0;同上,b(1)与mul_a相乘的结果 结果类似
stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0;
stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0;
add01 <= stored1 + stored0;
add23 <= stored3 + stored2;
mul_out <= add01 + add23; 将结果相加
end
end
endmodule -----总结 就是 四位二进制 乘法, 可以结合 小学数学 四位数乘法,把其中一个四位数分为 个十百千 分别与另外一乘数相乘然后再相加的方式考虑。
上海巴鲁图工程机械科技有限公司_
2022-05-15 广告
2022-05-15 广告
光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器每转输出60(我们用老板没有说)个脉冲,五线制。其中两根为电源线,三根为脉冲线(A相、B相、Z)。电源的工作电压为 (+5~+24V)直流电源。光...
点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询