首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

quartus WIZARD

quartus WIZARD

library ieee;
use ieee.std_logic_1164.all;
--library bitlib;
use work.bit_pack.all;

entity static_ram is
generic (  --下面给出的是RAM6116的时间特性值
           --在本系统的组装中将被置为43258A-25CMOS RAM
           --的时间特性值
           constant taa  :time := 120 ns;
           constant tacs :time := 120 ns;
           constant tclz :time := 10 ns;
           constant tchz :time := 10 ns;
           constant toh  :time := 10 ns;
           constant twc  :time := 120 ns;
           constant taw  :time := 105 ns;
           constant twp  :time := 70 ns;
           constant twhz  :time := 35 ns;
           constant tdw  :time := 35 ns;
           constant tdh  :time := 0 ns;
           constant tow  :time := 10 ns
         );
port (cs_b,we_b,oe_b :in bit;
      address :in bit_vector(7 downto 0);
      data :inout std_logic_vector(7 downto 0) := (others =>'Z')
      );
end static_ram;

architecture sram of static_ram is
type ramtype is array(0 to 255) of bit_vector(7 downto 0);
signal ram1:ramtype;-- := (others =>(others =>0));
signal flag:bit:='1'; 
begin
 ram :process
 begin
    --使用flag信号值对ram1清零,且只进行一次
    if flag='1' then
     for i in 255 downto 0 loop
   ram1(i)<="00000000";
     end loop;
     flag<='0';
    end if ;
   
    if (we_b'event and we_b='1' and cs_b'delayed ='0') or
     (cs_b'event and cs_b='1' and we_b'delayed ='0') then
     --写操作
     ram1(vec2int(address'delayed)) <=to_bitvector(data'delayed);
     --写操作完成后将数据读出
     --data'delayed的值是data变为高前的值
     data <=transport data'delayed after tow;
    end if;
    --置RAM为写模式 
    if (we_b'event and we_b='0' and cs_b='0') then
      data <=transport "ZZZZZZZZ" after twhz;
    end if;
    if cs_b'event and oe_b ='0' then
       --RAM未选中
       if cs_b ='1' then
         data <=transport "ZZZZZZZZ" after tchz;
       --读操作
       elsif we_b ='1' then
        data <=transport "XXXXXXXX" after tclz;
        data <=transport to_stdlogicvector(ram1(vec2int(address))) after tacs;
       end if;
    end if;
    --读操作
    if address'event and cs_b ='0' and oe_b='0' and we_b='1' then
      data <="XXXXXXXX" after toh;
      data <=transport to_stdlogicvector(ram1(vec2int(address))) after taa;
    end if;
    wait on cs_b,we_b,address;
 end process ram;
 
 check :process
 begin
  if cs_b'delayed='0' and now/=0 ns then
     if address'event then
        --假定trc=twc
        assert (address'delayed'stable(twc))
        report "address cycle time too short"
        severity warning;
     end if;
      
       if (we_b'event and we_b='1') then
        assert (address'delayed'stable(taw))
        report "address not valid long enough to end of write"
        severity warning;
        assert (address'delayed'stable(twp))
        report "write pluse too short"
        severity warning;
        assert (data'delayed'stable(tdw))
        report "data setup time too short"
        severity warning;
        assert (data'last_event>=tdh)
        report "address cycle time too short"
        severity warning;
      end if;
  end if;
  wait on we_b,address,cs_b;
 end process check;
end sram;
使用quartus 自动生成一个 sram 的描述,但是发现代码如上,怎么不可以综合呢 ?

难道我的设置有问题?

返回列表