EDA365电子论坛网
标题:
数字电路设计之ARM m0进度(1)
[打印本页]
作者:
thinkfunny
时间:
2020-11-25 13:36
标题:
数字电路设计之ARM m0进度(1)
这个例子是用于测试我写的ARM这个内核,测试例子是一个求最大公约数和最小公倍数的程序。
: `& L* _8 U) Y8 C4 b
. C4 ~# b1 {6 Q }* \' a4 z
+ }& d$ E$ X2 h
1、已解决问题:LDR1这条指令的
/ {: \ B8 W+ R6 [3 b4 E
: {! V0 N! ^+ s* g% o% n
#10 i_datain <= { `LDR1, 5'b0000_1, `gr0,`gr2}; //LDR0 5'b01001,PC 00:6a01
- U. _! ]( {- Q3 K$ A
#10 i_datain <= { `LDR1, 5'b0001_0,`gr0,`gr1}; //LDR0 5'b01001,PC 04:6902
8 \9 S' E2 R- E! X3 k; j5 H
//阻塞相当于延迟一个周期取i_datain
1 _$ T8 i) w ], t1 `- r9 H1 W
#10 i_datain <= { `ADD1, `gr1, `gr0, `gr3};//ADD1 7'b0001100 //Rd=Rm+Rn 08:1883
* V- j) P( G8 G7 l% z
#10 i_datain <= { `ADD1, `gr1, `gr0, `gr3};//ADD1 7'b0001100 //Rd=Rm+Rn 08:1883
8 u( i# g# M3 ]! M- o! I
d_datain <= RAM[0];//32'hffff0000;//32'h000f0000;
+ C6 M( `: h- s
#10 i_datain <= { `SUB0, `gr1, `gr2, `gr1};
: L' G5 k9 I. g( U9 Z9 Q
d_datain <= RAM[1];
V0 H5 Q, _( Z
这里的处理就可以仿真RAM的时序。要特别注意这个是碰到LDR1要stall的仿真。
1 `4 q# s: G/ `% ~
# U5 B2 z: U2 i& } K
2、未解决问题:跳转到具体位置(需加上内核RAM之后再确定)
( A4 P* z! Q+ q) c
# w! n% P. o6 D: J# x
#10 i_datain <= { `B1, 12'b0100_0000_1001 }; //0e:d409
O9 E5 X% G6 J) E9 r* l4 P
3、已解决问题:条件跳转时nf会在为0或者为1是都会跳转,因为是测试是用了别的处理器的汇编代码。为了解决这个问题,就把其中一个条件略作了改动,以测试这个汇编代码。
' G) n7 a) x. i0 H* Q/ l" N
) w) f1 a# s/ B4 J
nf <= 1; 跳转
1 t- T5 \% D. T
cf <= 1; 其实就是nf = 0 适合的是nf=0跳转
+ Z8 q% }6 s3 q$ q, c3 L! i; I
4、已解决问题:跳转时序调整(将跳转信号往后一个周期)
; r6 Q; r9 G9 `
8 q0 q& t5 c! I# L6 ^5 l
assign can_jump = ((cond_1[3]==1'b1)&&(nf == 1))|((cond_1[2]==1'b1)&&(zf == 1))|((cond_1[1]==1'b1)&&(cf == 1))|((cond_1[0]==1'b1)&&(vf == 1));
: W) K! g @ {
5、已解决问题:信号条件跳转后,后面取得两条全部都是废的,那么我们就将其控制信号置为0即可。
) L. v1 W7 p% ? X1 u& Q, R/ {/ }& W
- B; u: a/ E1 V4 s! c! `, i/ `9 f1 ]
未加RAM的正确方针:
# f. e7 z" ~4 N
. }- m8 k. X) L2 z
#10 i_datain <= { `B1, 12'b0010_0000_0010 };
" W9 j" f# A# }8 \" M" c. b
#10 i_datain <= { `ADD1, `gr1, `gr0, `gr3};//ADD1 7'b0001100 //Rd=Rm+Rn 08:1883
6 _" q' e& `/ h/ v& v! N( J
#10 i_datain <= { `ADD1, `gr1, `gr0, `gr3};//ADD1 7'b0001100 //Rd=Rm+Rn 08:1883
N: \. R% {' {( g
#10 i_datain <= { `ADD1, `gr1, `gr0, `gr3};//ADD1 7'b0001100 //Rd=Rm+Rn 08:1883
" }( [2 L+ o5 p% C+ b9 Q
6、未解决问题:内核的pc和RAM的时序不一致。需要进行一些时序上的调整。
: e$ W$ T9 o3 c
当前进度:
/ |5 Z5 L! Z+ K9 h5 J
% Z8 |. J* ]8 C# A) E! {! A8 d
7、已解决问题:无条件跳转,在取操作数的时候进行跳转。这样就可以只要一条的取指代价。
' a9 I2 K; x! Q, g+ G
8、已解决问题:对齐enable与地址信号。
$ w, v5 H2 b4 v6 D: k3 h6 p
# W4 g' k5 h) @8 |0 }9 ?. J: ~
always@(posedge clock) begin
# u: p$ [8 u. ` w/ O7 Q) w
if(!reset)
5 A+ P7 j8 i9 n0 }2 q3 T: m( B
d_addr <= 0;
9 O1 [6 P- r" n" `, r3 V
else
: m1 Q1 ]7 ?* C- N0 U% V
d_addr <= reg_C[6:0];
@8 Z2 K. K7 J" ~4 S% N
end
: _% j0 A' O4 W7 y: Y6 ^8 B
9、未解决问题:LDR1的d_re还没有检测。
$ [" u1 w( s& a t1 S& v
10、工程进度:测到地址为0xe的指令。
; g! S& L# Y* x. c- d! j. H
作者:
yin123
时间:
2020-11-25 15:00
数字电路设计之ARM m0进度
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2