TA的每日心情 | 开心 2019-12-2 15:01 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用Quartus II64-Bit Version 13.1.0 Build 162 Full Version对一个工程进行编译,但是综合阶段报错。! m+ a" p3 p# x+ J& i% E
源码如下:: j2 e9 a, b7 p( M, m1 O
/*2 z) f) m; i4 P* ]
该模块是将计数器32bit计数值通过一个Byte从低位依次传给mcu
/ M; C( G' f1 c! p*/
& o- C, I. S7 J: X# jmodule Data_Out ( reset, Data_Ready, Counter_Data, Data_Update, Data_Bus );) i. S. \5 G; g/ {* L. ~' c6 ?' D3 i& ]
6 z# K" W3 R7 L- ]% [input reset; //复位信号,低电平有效, v8 e2 S4 U8 ~0 w J; B
input Data_Update; //MCU通过Data_Update通知FPGA可以更新Data_Bus
2 L8 m5 U1 u5 s# u! X9 qinput [31:0] Counter_Data; //32bit计数器输出的计数值1 T: y' ~/ V* M0 W% c3 l6 I6 w8 f
output Data_Ready; //FPGA通知MCU已经更新Data_Bus, \5 C! q9 _1 W3 V: X1 X$ I
output [7:0] Data_Bus; //连接到MCU的数据总线。
o; n5 ]/ [1 U+ K/ D& H; k; ^6 u; P, ~0 i6 r; l& E
reg [2:0] Data_Order; //控制数据总线更新的状态标志
* f. ~) f* t& `& [( b3 d, J- |wire [7:0] data0; //Counter_Data[7:0]# g( G+ w1 x$ e# _& i. s7 |7 Q
wire [7:0] data1; //Counter_Data[15:8]
" X( z, C- S% V$ @+ X0 N Wwire [7:0] data2; //Counter_Data[23:16]. V$ E( c9 D) w9 Q7 R* `8 `
wire [7:0] data3; //Counter_Data[31:24]
O/ T+ O+ M9 F& l8 s
8 ~4 c8 { E$ n7 | }) t/*将32bit数据Counter_Data分4个字节分别送给data0~data3*// u; d6 c/ c5 ^' a2 Z9 F8 v
assign data0 = Counter_Data [7:0];# v, q( M% b' x6 r5 P" [
assign data1 = Counter_Data [15:8];8 `/ j' r7 B/ `0 ?# s0 M
assign data2 = Counter_Data [23:16];
. D/ k8 S7 ?. x% e3 \- N- wassign data3 = Counter_Data [31:24];3 O: o2 y C# V2 ^" n& s
' p i2 ?" Z, n: b
/*根据reset和Data_Update,更新Data_Order*/$ x$ `' G) h7 ]0 m7 S" K, v
always @( negedge reset or Data_Update ): P3 S/ E0 A9 S( {8 P
begin
1 b' `3 ~5 A2 r( x if ( reset == 0 ) //reset有效,清零Data_Order。' n: ~5 Q$ Y/ h8 b4 _- U! |' E
begin7 q9 u' j+ t' b2 M6 H& U' l
Data_Order <= 3'b000;
5 P5 ?( x0 X6 u end
8 p" |7 t$ `. t5 k4 [" J$ B; G9 t2 y6 N( K else if ( Data_Update == 1 ) //Data_Update为高电平,则对Data_Order 更新! u: O% g4 n- W: H# d+ @6 E
begin
6 t4 a1 M7 D0 z5 r0 M Data_Order <= Data_Order + 3'b001;1 J) `* v$ J ]/ i5 O
if ( Data_Order == 3'b100 ) //Data_Order 已经到达最后状态,更新到第一个状态
5 y$ \5 K8 k j: L3 I; c7 B begin: z. f& {) F1 k+ C& N6 w
Data_Order <= 3'b001;
' O2 V" r- `, g9 R1 Z end
0 g( Y0 I7 T( l. X0 N9 \ end% N- v- x* T' }. d# D
end% k6 A3 Q$ Z% a k
+ q! R+ D8 S* [
/*根据Data_Order的不同状态,对Data_Bus和Data_Ready更新*/
7 E6 U" L/ e# t2 A; _5 x" Talways @( Data_Order , data0, data1, data2, data3, Data_Update )) l+ i* X4 t/ x. y% q
begin g: M- X. \1 E- l& Y% b1 T- }) \
case ( Data_Order )# L; v! y$ D% W. H5 d# L1 y
3'b001: begin) \2 q: J# m* C/ N
Data_Bus = data0;1 A7 I0 D/ a: I* q5 P ^
Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线
" f8 W3 v/ i- Y end# n( ]# [/ P1 i4 B
3'b010: begin, y& P) {0 v& D! |: y. S
Data_Bus = data1;
7 {" \: l/ L- C N0 ^$ K q Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线
6 r9 s9 L1 m& S( Q, j end
u* d: n7 {( T% N0 K0 B( Q7 c$ \ 3'b011: begin a2 H7 K; _2 Y! E4 \
Data_Bus = data2;
$ b, R8 X* Y2 B8 a" R6 K Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线1 p( r# a$ i! Q
end6 S5 X1 w" G$ \8 ~1 m4 J4 |% z& [
3'b100: begin
6 r2 O% }9 ] n% p Data_Bus = data3;) ^% x; w- W7 y" h1 U. c
Data_Ready = 1'd1; //更新Data_Bus同时将Data_Ready拉高,通知MCU采样数据总线- l5 H4 s' Q8 Z/ Q$ l
end
! }/ z% F, `: |0 R* i- I! l$ W default: begin
* \/ ?" d* I( i) m9 s Data_Bus = 8'h00;/ q) O( e. @, a6 X3 H
end8 i) ^4 Q! ? j8 `% n, j
endcase
0 E9 b( M% K3 P. }6 ?* c0 Q y if ( Data_Update == 0 ) //Data_Update被MCU拉低后,Data_Ready也被清零+ j$ }$ C3 \7 q
begin8 L6 ]5 M ]6 }* e7 [7 u* o
Data_Ready = 1'd0;6 q) y2 E x/ _8 |& Q: j C r
end9 c% H, X& v$ Z' u* v
end
0 x- o' ]% E, i1 j C7 l" s2 }0 Q1 e3 ?' G
endmodule
' e, o1 D# F8 C/ s3 c& x# d
/ v/ Q! u- I, |- H# d! z
; f) N) o' k. v! w* o在综合阶段出现错误:
( h! J! L1 S; {( u& z% vError (10137): Verilog HDL Procedural Assignment error at Data_Out.v(46): object "Data_Bus" on left-hand side of assignment must have a variable data type- X z; g1 {; @& ]
! D+ S' Q/ Y% a3 k; L: G% r% _, I* J
请教高手对于这个问题应该如何处理能够解决?
+ A8 t& ^' \$ B* x# X
6 h. {1 U; w+ A% g" v: ?& I |
|