|
发表于 2021-5-15 18:02:20
|
显示全部楼层
(1)关于memory,你可以直接调用quartusii的IP,但要确保接口匹配;(差异不大)
(2)建议把8051指令集(100多个)的内容再看几遍,这样你就理解ALU(算术、逻辑指令);(3)既然是毕设,那就需要知道你论文的创新点在哪里,不清楚的地方就去请教老师(老师才是审核和发问的人)。如果你想在除法器或乘法器上做文章,那就要多去找这方面的资料看看,然后通过仿真来验证你的方法。
divide文档做了下修改(如下),自己添加些激励去仿一仿(自己建testbench),直接看代码有时会比较难理解。
module div_8(
output [15:0] divide,
input [7:0] a, b);
reg [7:0] ans;
reg [7:0] rem;
reg [7:0] x7;
reg [7:0] x6;
reg [7:0] x5;
reg [7:0] x4;
reg [7:0] x3;
reg [7:0] x2;
reg [7:0] x1;
reg [7:0] x0;
reg [1:0] y5;
reg [2:0] y4;
reg [3:0] y3;
reg [4:0] y2;
reg [5:0] y1;
reg [6:0] y0;
always@(*) begin
x7 = a;
ans[7] = (|b[7:1])? 1'b0 : x7[7];
x6 = {(~ans[7])&a[7],a[6:0]};
ans[6] = (|b[7:2])? 1'b0 : (x6[7:6]>=b[1:0]);
y5 = ans[6] ? (x6[7:6]-b[1:0]) : x6[7:6];
x5 = { y5, a[5:0] };
ans[5] = (|b[7:3])? 1'b0 : ( x5[7:5]>=b[2:0] );
y4 = ans[5] ? (x5[7:5]-b[2:0]) : x5[7:5];
x4 = { y4, a[4:0]};
ans[4] = (|b[7:4])? 1'b0 : ( x4[7:4]>=b[3:0] );
y3 = ans[4] ? (x4[7:4]-b[3:0]) : x4[7:4];
x3 = {y3, a[3:0]};
ans[3] = (|b[7:5])? 1'b0 : ( x3[7:3]>=b[4:0] );
y2 = ans[3] ? (x3[7:3]-b[4:0]) : x3[7:3];
x2 = {y2,a[2:0]};
ans[2] = (|b[7:6])? 1'b0 : ( x2[7:2]>=b[5:0] );
y1 = ans[2] ? (x2[7:2]-b[5:0]) : x2[7:2];
x1 = {y1,a[1:0]};
ans[1] = (|b[7]) ? 1'b0 : ( x1[7:1]>=b[6:0] );
y0 = ans[1] ? (x1[7:1]-b[6:0]) : x1[7:1];
x0 = {y0,a[0]};
ans[0] = (x0>=b);
rem = ans[0] ? (x0-b) : x0;
end
assign divide = {rem,ans};
endmodule
|
|