Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 9739|回復: 6
打印 上一主題 下一主題

[問題求助] VHDL转verilog问题

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-12-29 14:16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
手里面有个VHDL写的FIFO,现在想转换成VERILOG的
! |2 @. o5 n! K6 M原代码如下

  1. # R$ k* g& V, u3 x5 V  Q" J4 E  Z7 b
  2. : ?* J. M2 o# w; D1 \! }' R
  3. CNT: process(CLR, WR_PTR, RD_PTR). |9 F, R; \1 K- z$ S6 F9 `
  4.   variable change : integer;  4 h8 f% ?$ J5 D7 ^1 _; k. L
  5. begin  
      g6 d2 q3 J8 [# F# y
  6.   if CLR = '1' then
    * _+ u+ L, I  \/ n4 h2 F5 ~: R9 j
  7.    count <= 0;
    $ X% w$ ?. X% y8 x5 t# |# v# i0 |
  8.    change := 0;& K3 z' [; M- I$ B
  9.   else
    3 R1 w4 k% K4 @2 _8 A
  10.    change := 0;
    2 M* t# D/ i& l5 |- S; x9 u
  11.    if WR_PTR'event then6 C4 R/ a7 |' T2 E) o
  12.     change := 1;
    . H" U5 P" n5 C3 g
  13.    end if;$ w* r" z8 ^# Z1 Z% v4 a3 `
  14.    if RD_PTR'event then
    0 ]+ |# T  b/ f8 ^
  15.     change := change - 1;, n/ u) ?+ U' F
  16.    end if;" ]6 s' g3 z! s7 R8 m1 W( {
  17.    count <= count + change;, y. E, t8 r: T; L9 V" n- t9 |% K
  18.   end if;( x" e2 e% n8 z/ D- c& U
  19. end process;
複製代碼
不知道改为Verilog该怎么写红色部分。% z; F3 _5 p, _" M
我想是用always@( WR_PTR)2 c  o% u1 y! V* E# ]- {
但是process(CLR, WR_PTR, RD_PTR)这一句已经用了always了,没办法,刚接触verilog,请大家帮帮忙
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-1-5 12:41:03 | 只看該作者
這個fifo程式有問題喔,沒有clock訊號,很奇怪.
3#
 樓主| 發表於 2009-1-6 16:31:33 | 只看該作者
这个FIFO程式有CLK的,我这里只是一部分代码,没有将所有代码贴出来,只是希望大家告诉我该怎么写if WR_PTR'event then
4#
發表於 2009-1-7 11:42:34 | 只看該作者
1. VHDL clock 語法好像不太對,應該是 if WR_PTR'event and WR_PRT='1' then+ Y' Y6 r# a$ [& b! X" M: v
2. count 沒有clock!你可能需要把全部貼出來,看是不是漏掉了?$ M8 A1 h3 `8 n( A  d8 g- w
3. 一個process有兩個clock,一般不會這樣寫的。
5#
 樓主| 發表於 2009-1-10 22:11:05 | 只看該作者
  1. ------------------------------------------------------------------------------------
    # T  t. ]6 B8 G7 D$ C' b8 {! u9 F
  2. library IEEE;
    * h- Y/ \; g8 T4 Y. a
  3. use IEEE.std_logic_1164.all;5 d9 U5 m+ U' W- A) y
  4. entity fifo is
    ; Q' _% v2 R) r3 r: l' Y
  5.         generic (
    + j( r2 q, L' P  C* X
  6.                 depth : positive := 16
      p( \7 u- _5 q/ p5 `" Y: Q
  7.                 );       
    1 \* f2 a8 I9 _6 l6 \
  8.         port(+ S' j, h. u+ e2 ]' C% _
  9.                 CLR   : in  std_logic;
    8 x2 u2 A4 b4 i8 r- M/ D
  10.                 WCLK  : in  std_logic;
    0 U" N8 F4 P5 f  w: p
  11.                 WE    : in  std_logic;* A! j( m! B9 t- B/ A0 m" N3 D4 X; p! l
  12.                 RCLK  : in  std_logic;
    : J) |! X  |( D  ?9 {  I
  13.                 RE    : in  std_logic;' }  a4 u  P4 F9 e2 E# ^( D
  14.                 DATA  : in  std_logic_vector(7 downto 0);  V/ K  ?5 R  }( B! o% F
  15.                 EMPTY : out std_logic;9 j* W, V+ v  o; }; T2 a
  16.                 FULL  : out std_logic;
    2 l9 m, `: l$ q1 i4 j5 C1 u
  17.                 Q     : out std_logic_vector(7 downto 0)- I# T# O) m4 S. I, g) x" B
  18.         );
    1 S3 ^0 ^; v- ?
  19. end entity;! g6 ?  H+ [2 j8 U* @
  20. library IEEE;
    ( Z* T7 n  l6 m8 f+ d: O
  21. use IEEE.std_logic_unsigned.all;
    ; j# W  e& Y: w
  22. architecture behavior of fifo is* z  v$ y( B+ [& f3 A  P/ i: `
  23.         constant fmax : positive := depth-1;        7 q! c+ j! K) l# D
  24.         type fifo_array_type is array (fmax downto 0) of std_logic_vector(7 downto 0);, T5 [3 o$ _8 }/ M, @. N
  25.         signal fifo_array : fifo_array_type;4 u* y7 j7 |3 T3 T8 ~+ t
  26.         signal WR_PTR : INTEGER range 0 to fmax;
    + M& }3 M( Q2 B* r
  27.         signal RD_PTR : INTEGER range 0 to fmax;% w; L& _/ y3 |
  28.         signal count  : INTEGER range 0 to depth;! h% g0 A; E8 \$ o0 X
  29. begin7 Q9 W% ~& G+ }( I
  30.         CNT: process(CLR, WR_PTR, RD_PTR); m5 J& a# b, u8 \+ T$ u
  31.                 variable change : integer;                4 {0 O" P, y+ L  h% x
  32.         begin  
    / F' F( h7 P; K. A
  33.                 if CLR = '1' then/ q9 e8 _! \; O3 v4 V
  34.                         count <= 0;
    ! }9 Q7 v- w0 F( r/ ]: k& |
  35.                         change := 0;
    & K2 q* S) Q% z" K
  36.                 else
    ) h$ |) O0 |+ H
  37.                         change := 0;( H( i- I6 S5 z+ P2 Q
  38.                         if WR_PTR'event then
      ?* _; |% y9 ^& x0 [
  39.                                 change := 1;
    7 b' J/ H& w4 F- e+ R
  40.                         end if;6 H" F' V$ }* n+ A( b' [
  41.                         if RD_PTR'event then3 @# f3 _& c8 s6 g$ j' @
  42.                                 change := change - 1;. _/ a! C4 X6 R& `* \9 A& y7 y; Q
  43.                         end if;9 C' f# N! w  k" [
  44.                         count <= count + change;
    8 B/ x: {' i( w. m: ^* W' _  r2 y: t
  45.                 end if;
    ) d: ]- B* {8 G) ^" L
  46.         end process;       
    ( Y% w' r- A* x7 t4 n/ K
  47.         STATUS: process(count)! L  i5 Q2 u. h" w( G
  48.         begin  
    " W& c8 F3 C; E" T/ L3 t8 z& Z  _5 Y8 H
  49.                 if count=0 then6 u4 C( R1 U" W) S8 p
  50.                         FULL   <= '0';
    / E0 y! \; I( D6 [1 ]6 S4 p
  51.                         EMPTY  <= '1';  r8 d$ {3 q6 d- y
  52.                 elsif count=depth  then# s2 T) p; C8 `3 `9 u. Z2 w* E
  53.                         FULL   <= '1';
    0 ]6 x& D: h3 u
  54.                         EMPTY  <= '0';
    : i, i# _# W; K' R5 n
  55.                 else        $ E/ N; u3 s  \, c9 f. d
  56.                         FULL   <= '0';
      v$ ^! ]+ K$ }
  57.                         EMPTY  <= '0';
    6 T3 W( U. d9 G8 Q. h+ D1 G
  58.                 end if;                       
    " @, B  ^( |5 P$ T9 U
  59.         end process;       
複製代碼
6#
 樓主| 發表於 2009-1-10 22:13:00 | 只看該作者
  1.         FWRITE: process (CLR, WCLK)
    ! |2 p7 T9 s" [7 F5 g# h
  2.         begin
    # q' ~) @- K8 u6 B
  3.                 if CLR = '1' then% p) w" H* T/ G
  4.                         for INDEX in fmax downto 0 loop
    - z2 a: Q; W) E7 B: [; O+ _% S
  5.                                 fifo_array(INDEX) <= (others => '0');
    ) d/ J  D! }, }4 D
  6.                         end loop;
    ! I4 J8 B  Q! W6 k. O
  7.                         WR_PTR <= 0;8 i. e0 J* d0 V  i2 h
  8.                 elsif rising_edge(WCLK) then0 ~6 S3 l6 j$ a6 |) A, {
  9.                         if WE = '1' and count<depth then
    + m& ?: k1 D" X
  10.                                 fifo_array(WR_PTR) <= DATA;
    - |  c7 T+ E' Q4 R* f
  11.                                 -- move pointer
    2 W1 E5 I; L$ k; H- N' Q
  12.                                 if WR_PTR=fmax then ) v1 U( @; O5 i% X4 w( c
  13.                                         WR_PTR <= 0;
    $ \6 V" Y+ N! E8 Z& z
  14.                                 else WR_PTR <= WR_PTR + 1;
    0 M: [1 ~) [/ N# l) h" P1 y9 e
  15.                                 end if;( |: {& z% ^8 O/ k5 }' ~
  16.                         end if;; f: M7 _1 U5 Y7 n4 D
  17.                 end if;
    ; E! F1 d" I/ o2 r7 H* y
  18.         end process;1 N& `0 A8 h+ r! q2 M5 ~8 d; |
  19.         FREAD: process (CLR, RCLK)
    ( Y2 u( E+ M2 T- _$ d7 K
  20.         begin
    / B( s+ _0 f  [/ Z; y# f
  21.                 if CLR = '1' then
    * C0 r2 U' D' {4 V
  22.                         RD_PTR <= 0;+ R' Y# U( E/ B' H" b1 m7 b
  23.                 elsif falling_edge(RCLK) then; K" `. W4 W' ^* w1 e6 f7 B
  24.                         if RE = '1' and count>0 then- k/ L% X6 X* i7 ?
  25.                                 Q <= fifo_array(RD_PTR);* s, r  b) J' b# {0 s$ G
  26.                                 -- move pointer 4 T  g# S" z7 S% W% s
  27.                                 if RD_PTR=fmax then
    / M7 `1 q0 p7 E
  28.                                         RD_PTR <= 0;
    / ]5 K, C# n2 N7 [$ s5 ?7 W& s( u: y
  29.                                 else RD_PTR <= RD_PTR + 1;
    2 H6 @5 f9 Y( l; [* P# I. U& L/ h0 w
  30.                                 end if;3 K. g/ k6 Y3 m6 E( v" S6 ]8 I
  31.                         end if;
    ( U0 R8 `2 v& w" D4 S
  32.                 end if;
    ! U1 D. M- g9 }* f
  33.         end process;. T, w' W1 E: I* P+ O( b6 A
  34. end architecture;
複製代碼
7#
發表於 2009-7-4 00:42:31 | 只看該作者
印象中有个工具可以转vhdl 为 verilog,可以看看,或许有用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-9-27 09:34 PM , Processed in 0.177010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表