shawn 的档案 - 激活

2020-06-13 00:15:46 +0800 获得奖牌  著名问题 ()
2020-06-08 10:42:42 +0800 获得奖牌  著名问题 ()
2020-06-04 17:58:16 +0800 获得奖牌  著名问题 ()
2020-06-02 10:31:01 +0800 获得奖牌  著名问题 ()
2020-05-26 20:21:48 +0800 作最佳回答 FPGA实现基于LUT(查找表)的DDS的设计(含matlab和verilog源码)

基于LUT的DDS的设计
DDS(Direct Digital Synthesis)直接数字频率合成技术由USA J.Tierncy首先提出。它是一种以数字信号处理理论为基础,从相位概念出发直接合成所需波形的一种新的全数字技术的频率合成方法。DDS主要出现在数字混频系统中。在数字混频中,通过DDS产生正交的本地振荡信号即正、余弦信号与输入信号相乘实现频谱搬移,如通信系统的调制、解调。目前FPGA实现DDS有三种途径:基于IIR滤波器的实现方法、基于查找表LUT的实现方法以及基于CORDIC算法的实现方法。其中采用LUT的方法较为通用且比较容易实现。

1 基于LUT的DDS理论

一个典型的基于LUT的DDS系统由相位累加器和波形存储器两部分构成,如图1所示。图中相位累加器的位宽为nbit,步进值为μ,LUT的深度N为2n,宽度为Lbit。LUT中依相位顺序存储一个周期的波形数据。

图1 基于LUT的DDS架构.png
图1 基于LUT的DDS架构

2 matlab 仿真

图2 相位累加器位宽为4bit时LUT地址与存储数据的对应关系.png
图2 相位累加器位宽为4bit时LUT地址与存储数据的对应关系
如图2所示,我们要制作地址位宽为10bit数据位宽为32bit的LUT查找表。Matlab源码如下:

clear all
close all
clc

FS = 44100;%采样率
fc = 1000;
N  = 1024;%1024点一个正玄周期

t =0:2*pi/(N-1):2*pi;

sin_dds = sin(t);

figure,
hold on
plot(t,sin_dds,'*');
legend('sin');
grid;
hold off

图3 matlab 1024点1个周期的正弦波.png
图3 matlab 1024点1个周期的正玄波

3 FPGA仿真

整个仿真结构如图1所示,由相位累加控制器和sin波形存储器组成。仿真生成采样率为44.1KHZ @1KHZ正玄波和余弦波(相位相差90度)。

tb_dds源码:

`timescale 1ns / 1ps  
`define NULL 0  
module tb_dds();  

   parameter KHZ1 =44;  
   parameter KHZ2 =22;  
   parameter KHZ4 =11;  
   reg clk;   
   initial begin   
  clk = 0;   
  #313333 clk = 0;   
  forever #11.072 clk = ~clk;   
end//45.1584MHZ  

reg reset_n;   
initial begin   
  reset_n = 1;   
  #10000 reset_n = 0;   
  #100000 reset_n = 1;   
end   

reg [9:0] addr;  
reg [9:0] cnt;  
reg [31:0] k;  
integer fb;  

wire signed [31:0]     sin;  
wire signed [31:0]     cos;  

//Phase accumulation controller  
always @(posedge clk or negedge reset_n) begin  
  if(!reset_n) begin  
      addr <= 0;  
      cnt  <= 0;  
    end  
  else if(cnt == KHZ1-1) begin  
    cnt <= 0;  
    addr <= addr +10'd1;  
  end  
  else begin  
    cnt <= cnt + 1;  
    addr <= addr;  
  end  
end  

//reg [8:0] i;//88.2khz  
reg [9:0] i;//44.1khz Sample rate  
reg signed [31:0] sin_slow;  
reg signed [31:0] cos_slow;  

always @(posedge clk or negedge reset_n) begin  
  if(!reset_n) begin  
    i <= 0;  
    sin_slow <= 0;  
    cos_slow <= 0;  
    k <=0;  
    fb = $fopen("sin.dat","w");  
    if(fb == `NULL) begin  
      $display("Can not open sin.dat");  
      $finish;  
    end   
  end  
  else begin  
    i <= i+1;  
    if(i == 0) begin  
      sin_slow <= sin;  
      cos_slow <= cos;  
      k <= k +1;  
      $display("time=[%d],%d",$realtime,sin);  
      $fwrite(fb,"%d\n",sin);  
      if(k == 4096) begin   
        $fclose(fb);  
        $stop;  
    end  
    end  
  end   
end   



dds_rom U_dds_rom(   
       .clk(clk),  
       .addr(addr),//0-1023 1T  
       .sin(sin),  
       .cos(cos)  
       );  
endmodule

仿真结果:
生成Sample rate 44.1KHZ@1KHZ的正玄和余弦波相位相差90°。
图4 modelsim 仿真结果.png
图4 modelsim 仿真结果

4 Matlab FFT分析:

图5 FFT分析结果.png

图5 FFT分析结果
由图5可知产生的正玄波频率为1KHZ。基于LUT的DDS设计完成,此节将是后期基于FPGA数字信号处理的基础和关键。

完整源码见下面第一个回答

2020-05-26 20:03:48 +0800 获得奖牌  受欢迎的问题 ()
2020-05-26 20:03:48 +0800 获得奖牌  热门的问题 ()
2020-05-18 17:37:09 +0800 回答问题 win10 Diamond3.11通过reveal抓取信号问题

diamond 安装3.10及以上版本即可。

2020-05-11 21:27:30 +0800 作最佳回答 MCU模拟JTAG接口对LATTICE CPLD进行在线编程加载

作者:Rock.Ding(莱迪思半导体公司)
关键字:MCU, JTAG, 在线编程, CPLD。

前言

CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,通过编译,映射,布局布线,最后生成相应的JED文件,然后通过CPLD厂家提供的下载电缆和下载软件把JED文件下载器件里面,实现用户的功能。在实际应用中,根据设计需要或修复之前设计中的Bug,常常需要在线升级CPLD的内容。目前各厂家都有提供相应的方案,可以在嵌入式系统中通过CPU来更新CPLD。厂家考虑到方案的兼容性,往往实现编程的代码都比较复杂,而且占用内存资源较大。不适合MCU这样的小系统。本文以Lattice XO2系列的CPLD为例,详细介绍JTAG的编程原理及如何用MCU来模拟JTAG编程Lattice XO2 CPLD。理解了JTAG编程原理后,也可以很容易实现模拟JTAG编程其它的CPLD和FPGA。

一,JTAG介绍

JTAG最初是用来对芯片进行测试的,JTAG的基本原理是在器件内部定义一个TAP(Test Access Port;测试访问口)通过专用的JTAG测试工具对内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。如今,JTAG接口还常用于实现ISP(In-System Programmer,在系统编程),对CPLD,FPGA等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程然后再装到板上,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度及编程的灵活性。
JTAG引脚定义
具有JTAG口的芯片都有如下JTAG引脚定义:

  • TCK——测试时钟/编程时钟输入;
  • TDI——测试数据/编程数据输入,数据通过TDI输入JTAG口;
  • TDO——测试数据/编程数据输出,数据通过TDO从JTAG口输出;
  • TMS——测试模式选择/改变TAP内部的状态机的状态。
  • TDI, TMS上的数据输入及TDO上的数据输出都是在TCK时钟的作用下完成的。

二,JED文件介绍

JED文件是一个包含了器件的编程内容的文本文件。本文以Lattice XO2系列的CPLD的JED文件为例,简约介绍JED文件的格式,下面是Lattice的开发工具生成的JED文件中截取的一部分:

NOTE Diamond_1.2_Production (92) JEDEC Compatible Fuse File.*
NOTE Copyright (C), 1992-2010, Lattice Semiconductor Corporation.*
QP132*
QF343936*
G0*
F0*
L000000
1111111111111111101111011011001111111111111111110011101100000000000000000
NOTE EBR_INIT DATA*
L137984
1111111111111111111111111111111111110110000000000000000000000000000000000
NOTE END CONFIG DATA*
L184832
0000000000000000000000000000000000000000000000000000000000000000000000000
NOTE TAG DATA*
L343808
0100010001000100000010001000000000000000000100010000000000000000000000000
C5CC8*
NOTE FEATURE_ROW*
E0000000000000000000000000000000000100001000010000000000000000000
NOTE User Electronic Signature Data*
UHCAFEBABE*
6243

JED文件里面的每一个区域(Field)都是以一个关键字开始,以星号字符结束。常用关键字说明如下:
NOTE:注释信息,包含设计的一些信息,例如器件名字,设计时间等。编程时,其实不需要这些信息,仅为了更好的理解这个设计。
QP132: 表示是132Pin的封装。
QF343936:表示器件包含了343936个编程Bit。
G0:表示不编程加密位,如果是G1表示编程加密位。编程加密位后,器件的内容不能回读。
F0:表示没有指定编程内容的编程位的缺省值为0,如果是F1,缺省值是1.
L000000:表示后面的编程类容从地址0开始。
L137984:同上,表示后面的编程内容从地址137984开始。
C5CC8:表示所有编程内容的校验和。
E:表示后面是Feature Row的编程内容。
UH:表示ASSCII HEX格式的User Code 码。
6243:整个文件的校验和,即使编程内容不变,只是生成JED文件的时间不同,这个校验值也会不同。

三,模拟JTAG编程。

1,怎样获得JTAG的编程细节?

如果手上没有某个CPLD的具体JTAG编程指导文档,可以用厂家的编程工具生成SVF(Serial Vector Format)文件,该文件包含JTAG编程的详细流程和编程类容。以Lattice最新的编程工具Diamond Programmer为例,它附带了一个小工具,叫做Deployment Tool(图1),就可以生成SVF文件。
MCU模拟JTAG接口对LATTICE CPLD进行在线编程加载图1

SVF文件是文本文件,里面包含定义好的各种命令,详细描述了JTAG的编程行为。具体可参考Serial Vector Format Specification标准。SVF文件里面的命令很容易理解,下面从SVF文件中摘取一段擦除器件的SVF代码,做简单介绍:

! Erase the Flash
! Shift in ISC ERASE(0x0E) instruction
SIR 8 TDI (0E); SDR 8 TDI (0E);
RUNTEST IDLE 2 TCK;
! Shift in LSC_CHECK_BUSY(0xF0) instruction
SIR 8 TDI (F0);
LOOP 350 ;
RUNTEST IDLE 2 TCK 1.00E-002 SEC;
SDR 1 TDI (0) TDO (0);
ENDLOOP ;

感叹号后面的类容都是注释,只是为了更好的理解SVF命令。
SIR 8 TDI (0E); 表示在TDI上送入8Bit的数据给JTAG口,送入的数据是0x0E,先送低Bit,也就是Bit0。
SDR 8 TDI (0E); 也是表示在TDI上送入8Bit的数据给JTAG口。如果你细心会发现,和上一条指令送入的数据是相同的,JTAG怎么来区分这两条指令的呢?其实在把数据送入到JTAG口前,还要先设置JTAG内部的状态机,在执行SIR和SDR指令前,会把JTAG内部的状态机设置到不同的状态,这样JTAG就可以区分送入的指令是SIR还是SDR。怎样控制状态机,下小节会具体讲解。
RUNTEST IDLE 2 TCK 1.00E-002 SEC; 这条指令是把JTAG内部状态机设置到IDLE状态,然后在TCK上送入两个周期的时钟,再等待10ms。
LOOP 350 ;
RUNTEST IDLE 2 TCK 1.00E-002 SEC;
SDR 1 TDI (0) TDO (0);
ENDLOOP ;
LOOP 和ENDLOOP是组合起来使用的,表示循环执行两者之间的命令多少次。
SDR 1 TDI (0) TDO (0); 表示在TDI上送入1Bit数据0,同时在TDO上读取1Bit数据,期望读到的数据是0。就上面这段代码来说就是,如果在TDO上读到的值是0就会跳出循环,是1继续循环执行。

2,解析SVF命令。

如果用厂家的编程工具来编程,是由厂家的软件来控制JTAG口上的输入/输出数据的时序。现在我们通过SVF文件了解JTAG编程具体流程后,也可以解析SVF 命令来模拟这个时序。仔细观察SVF文件,里面主要包括三类指令,SIR,SDR,控制状态机的指令,SDR常用的有三种方式:

  • 1,只在TDI上送入数据,例如:

    SDR 128 TDI (0000B280071D000000623FFC0DB01216);

  • 2,送入数据同时,在TDO上读取数据,并判断读取的数据是否是期望的值,例如:

    SDR 128 TDI (00000000000000000000000000000000)
    TDO (414900000040000000DCFFFFCDBDFFFF);

  • 3,是在TDO上读取数据时,只判断MASK相应Bit位是1的TDO的值是否是期望的值,例如:

    SDR 32 TDI (00000000) TDO (012B2043) MASK (FFFFFFFF);

下面是解析SVF命令的C51函数,可以直接在Keil C51环境下编译。

1,JTAG状态机转换。

通过在TMS管脚上输入不同的01序列来实现JTAG状态机的控制,下面控制状态机的代码是在Lattice编程工具提供的参考代码修改而来。

typedef struct
{     
     BYTE CurState;/*** From this state ***/
      BYTE NextState;/*** Step to this state ***/
      BYTE Pattern;/*** The pattern of TMS ***/
      BYTE Pulses;/*** The number of steps ***/
}JTAGState;
JTAGState code JTAGStateTable[25]=
{
        {DRPAUSE,  SHIFTDR,  0x80,  2},
        {IRPAUSE,  SHIFTIR,  0x80,  2},一共25个状态,篇幅影响,这里只列了2个状态。
};
void Set_JTAG_State_Machine(BYTE nextstate)
{
    BYTE data i,j,temp;
    if((CurState == nextstate)&&(CurState != RESET))return;
    for(i = 0;i < 25;i++)
    {
        if((CurState == JTAGStateTable[i].CurState)&&(nextstate == 
        JTAGStateTable[i].NextState))break;
    }
    CurState = nextstate;
    temp = JTAGStateTable[i].Pattern;
    for(j = 0;j < JTAGStateTable[i].Pulses;j++)
    {
        if((temp & 0x80)== 0x80)TMSPin = 0x01; else TMSPin = 0x00;
        Send_1Clk(); temp = temp << 1;
    }
    TDIPin = 0x00; TMSPin = 0x00;
}

首先定义一个数据结构,包含状态机的当前状态(CurState);下一个状态(NextState);从CurState转换到NextState需要在TMS管脚上送入的Bit Pattern;以及送入的Bit位数。然后定义状态转换表,一共有25种可能的状态转换。注意从转换表中我们可以看到,即使NextState状态相同,但CurState不同,从TMS输入的Pattern和Bit数是不同的。Set_JTAG_State_Machine函数功能描述,该函数只需要一个参数,就是即将进入的是什么状态(nextstate),该函数会根据这个参数和状态机当前状态,在状态转换表中取出相应的Pattern和Bit数 (Pulses), 然后把它从TMS送入JTAG口,这样JTAG的状态机就会转到nextstate状态。

2,解析SIR(Scan Instruction Register)命令。

SIR是往指令寄存器中送入数据,纵观整个SVF文件,SIR命令送入的数据都是8Bit,实现SIR命令的C51函数如下:

BYTE Excute_SIR(BYTE instruction)
{
    BYTE data i;
    ....
    for(i = 0;i < 8;i++)
    {
        ...
    }
    Set_JTAG_State_Machine(IRPAUSE); return(SUCCESS);
}

该函数只需输入一个参数instruction,函数开始会把JTAG状态机转换到IRPAUSE状态,然后再转换到SHIFTIR状态,再把8Bit 的instruction从TDI管脚送入JTAG,先送低Bit。最后再把JTAG状态机转换到IRPAUSE状态。注意在for循环中,在TCK上只需送入7个时钟周期,也就是说这里送入的时钟周期比数据少一个。

3,解析SDR(Scan Data Register)命令

SDR命令往数据寄存器中送入和读出数据。编程时的数据输入和输出都是通过这个命令来实现。实现SDR的C51函数如下:

BYTE Excute_SDR(BYTE bit_len,BYTE TDI_mark,BYTE TDO_mark,BYTE mask_mark)
{
    BYTE data I, TDI_data, TDO_data, mask_data, ptr, result;   
    ptr = 0;  result = SUCCESS;
    ...
    for(i = 0;i < bit_len;i++)
    {
    ...
    }
    Set_JTAG_State_Machine(DRPAUSE);
    return(result);
}

上小节说到SDR命令可能有3种模式,不同的模式可能需要用到TDI,TDO,MASK数据,在调用这个函数前,根据需要先把数据存入TDI_Buffer,TDO_Buffer,MASK_Buffer里面,然后调用函数时,把需要送入JTAG的 Bit数据长度,是否有TDI数据,TDO数据及MASK数据四个参数传送给函数。在TDI上送入数据前,先把JTAG状态机转换到DRPAUSE,再转换到SHIFTDR,然后开始送入数据,同样需要注意在送数据时,在TCK上时钟周期数是送入数据Bit数少一个,例如送入128Bit数据,只送127个时钟周期。送完数据后,再把状态机转换到DRPAUSE,这样整个操作完成。函数执行成功,返回1,否则返回0。

四, MCU模拟JTAG编程CPLD完整例子。

上一节已经讲了实现JTAG编程的3个主要函数,本节主要是怎样调用这三个函数实现对CPLD的编程。本例子用到MCU是STC89LE516RD+,CPLD是Lattice LCMXO1200ZE。
Lattice LCMXO1200ZE大致编程流程是:

  • 1,检查器件ID,2,编程BSCAN 寄存器,3,使能编程,4,擦除Flash,5,编程Flash,一次编程1行128Bit,一种2175行,6, 编程user code,7,校验Flash, 8,校验User code,9,编程Done Bit,10, 退出编程模式, 11,Refresh。每一个操作可以用一个函数来实现,这里只讲解两个典型的操作:
  • 2, 编程Flash ,编程Flash前首先要复位Flash的地址,这个操作只执行一次,接着每编程一行,Flash的地址会自动加一,函数如下:

    BYTE Init_Address(void)
    {
       BYTE  result;
       Excute_SIR(0x46); TDI_Buffer[0] = 0x04;
       result = Excute_SDR(8,1,0,0);
       Set_JTAG_State_Machine(IDLE);
       Send_Num_Clk(2);Wait_ms(10);
       return(result);
    }
    

    然后以行为单位,编程Flash。调用函数前,需要把编程数据放入TDO_Buffer中。函数执行过程,先送PROG_INCR_NV指令,然后送入编程数据,最后检测编程状态,直到Busy Bit为0后才表示编程成功。成功函数返回1,否则返回0。下面是编程一行的函数,根据器件大小,Flash的行数不同,反复调用这个函数来编程Flash。

    BYTE Program_Row(void)
    {
      BYTE data loop,result;
       Excute_SIR(0x70); Excute_SDR(128,1,0,0);
       Set_JTAG_State_Machine(IDLE);
       Send_Num_Clk(2); Excute_SIR(0xf0);
       TDI_Buffer[0] = 0x00; TDO_Buffer[0] = 0x00;
       for(loop = 0;loop < 10;loop++)
       {
          Set_JTAG_State_Machine(IDLE); Send_Num_Clk(2);
           Wait_ms(10); result = Excute_SDR(1,1,1,0);
           if(result == SUCCESS)break;
       }
       return(result);
    }
    
  • 3, 校验 Flash ,校验Flash时,也需要先调用复位Flash 地址的函数Init_Address;然后输入LSC_READ_INCR_NV指令,表示开始读取Flash的数据,最后循环调用Verify_Row函数,来读取数据并校验是否正确,在每次调用Verify_Row函数前,需把校验数据放入TDO_Buffer中。相关函数如下:

    BYTE Verify_Row(void)
    {
       BYTE data result;
       result = Excute_SDR(128,0,1,0);
       Set_JTAG_State_Machine(IDLE);
       Send_Num_Clk(2);  Wait_ms(1);
       return(result);
    }
    
  • 4, 本例子中所有的命令和数据来自串口,每接收到一个命令执行一次操作。串口函数根据约定好的协议,从上位机接收命令和数据,接收到成功后,把相关命令传送给主函数,主函数调用相关函数执行相应的操作,执行完成后,又回到等待状态,等待下一个命令。上位机界面如下,只需要选择好串口,选好下载文件,点“Start”按钮就可以了。这里下载的文件是从JED文件转换而来,因为JED文件是文本文件,而且包含了很多注释信息,这里只提取了Flash行的类容,并转化为BIN文件。
    MCU模拟JTAG接口对LATTICE CPLD进行在线编程加载图2

总结

本例子模拟JTAG编程有关的代码大约只有300行,只要理解JTAG编程原理,就可以化繁为简。根据自己的需求,定制编程流程,不需完全照搬厂家提供的代码,这样在调试或功能改进中都更加容易和灵活。

完整源码已在知识星球公开,微信扫码加入,里面关于LATTICE的提问有问必答,人数每满10人价格上涨100RMB。
微信图片_20190520093935.png

参考文献:
1, MachXO2 Family Handbook,HB1010.pdf。
2, Serial Vector Format Specification,SVF_Spec_RevE.pdf。
3, Lattice VME source code。

2020-05-03 22:16:12 +0800 获得奖牌  著名问题 ()
2020-05-03 20:03:18 +0800 修改问题 求助:关于实现类似双边沿单稳态电路的办法,使用的是xilinx的ZYNQ7010。

求助:关于实现类似双边沿单稳态电路的办法,使用的是xilinx的ZYNQ7010。 1、问题:使用xilinx的ZYNQ7010的PL部分实现类似双边沿单稳态触发电路。 已知输入信号频率在7.9KHz~8KHz之间波动,波形为方波。当上升沿

2020-04-28 21:39:08 +0800 评论回答 FPGA 实现视频拉伸或转换

3万块,做不了产品,做个DEMO都不够。

2020-04-17 19:50:39 +0800 获得奖牌  热门的问题 ()
2020-04-09 22:32:16 +0800 获得奖牌  热门的问题 ()
2020-04-09 17:52:40 +0800 回答问题 输入十路千兆以太网,输出一路10G

你这个问题太大了,回答不了,建议去买个设计,然后自己从头至尾学习一下。

2020-04-09 17:17:34 +0800 回答问题 quarters 13.0调用modelsim出现error。

看起来是你的tb脚本中顶层是ADC0809...模块, 而你又在tb中调用了这个模块

2020-04-06 11:00:18 +0800 获得奖牌  受欢迎的问题 ()
2020-04-04 19:34:35 +0800 获得奖牌  著名问题 ()
2020-04-04 19:33:11 +0800 获得奖牌  受欢迎的问题 ()
2020-04-04 19:33:11 +0800 获得奖牌  热门的问题 ()
2020-04-04 19:32:02 +0800 获得奖牌  受欢迎的问题 ()
2020-04-04 19:32:02 +0800 获得奖牌  热门的问题 ()
2020-04-04 19:32:02 +0800 获得奖牌  著名问题 ()
2020-03-28 18:40:52 +0800 回答问题 NIOS 怎么扩展总线接口

网站资料一大把 http://read.pudn.com/downloads801/doc/3160849/qsys_lesson/Lesson13%20Altera%20FPGA%20%E5%8B%87%E6%95%A2%E7%9A%84

2020-03-26 16:39:27 +0800 获得奖牌  受欢迎的问题 ()
2020-03-26 16:39:27 +0800 获得奖牌  热门的问题 ()
2020-03-25 09:35:46 +0800 修改问题 quartus 19.1 下载直链

quartus 19.1 下载直链 进接用迅雷或者IDM或者FDM来下载,很快的,可以满速,不需要百度盘 quartus 19.1 Lite下载地址: http://download.altera.com/akdlm/software/

2020-03-24 21:32:49 +0800 修改问题 quartus 19.1 下载直链

quartus 19.1 下载直链 进接用迅雷或者IDM或者FDM来下载,很快的,可以满速,不需要百度盘 quartus 19.1 Lite下载地址: http://download.altera.com/akdlm/software/

2020-03-24 21:32:33 +0800 问了问题 quartus 19.1 下载直链

quartus 19.1 下载直链 进接用迅雷或者IDM或者FDM来下载,很快的,可以满速,不需要百度盘 quartus 19.1 Lite下载地址: http://download.altera.com/akdlm/software/

2020-03-21 17:23:10 +0800 获得奖牌  著名问题 ()
2020-03-18 20:30:28 +0800 获得奖牌  受欢迎的问题 ()
2020-02-27 13:33:36 +0800 获得奖牌  受欢迎的问题 ()
2020-02-27 11:41:01 +0800 修改问题 quartus ip核调用不成功

quartus ip核调用不成功 请问,在Quartus Ⅱ中 调用IP核之后,打开生成的.v文件又会回到设置IP核参数的界面,无法看到其中的代码,但是用记事本打开就可以看到代码,为什么? 请问,在Quartus Ⅱ中 调用IP核之后

2020-02-26 08:38:23 +0800 获得奖牌  受欢迎的问题 ()
2020-02-26 08:38:23 +0800 获得奖牌  热门的问题 ()
2020-02-26 08:31:03 +0800 获得奖牌  受欢迎的问题 ()
2020-02-26 08:31:03 +0800 获得奖牌  热门的问题 ()
2020-02-26 08:24:47 +0800 获得奖牌  热门的问题 ()
2020-02-26 08:24:07 +0800 获得奖牌  受欢迎的问题 ()
2020-02-26 03:13:19 +0800 获得奖牌  受欢迎的问题 ()
2020-02-15 22:14:34 +0800 获得奖牌  热门的问题 ()
2020-02-12 10:33:53 +0800 修改问题 vivado fft 计算结果是不是有问题?

vivado fft 计算结果是不是有问题? 大家好,我用xfft ip核对向量[1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0]进行FFT,计算结果序列的第一个数据为34(X"22")。这明显不对,正确的FFT计算结果序列

2020-02-11 19:20:56 +0800 修改问题 Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载)

Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载) 本文以ubuntu 18.04为例,但16.04与18.04差异不大,操作步骤类似。 本文系转载,原文出处不详。 [TOC] 目录: 1. 简介 Ubu

2020-02-11 19:19:44 +0800 修改问题 Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载)

Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载) 本文以ubuntu 18.04为例,但16.04与18.04差异不大,操作步骤类似。 本文系转载,原文出处不详。 [TOC] 目录: 1. 简介 Ubu

2020-02-11 19:15:51 +0800 修改问题 Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载)

Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载) 本文以ubuntu 18.04为例,但16.04与18.04差异不大,操作步骤类似。 本文系转载,原文出处不详。 [TOC] 目录: 1. 简介 Ubu

2020-02-11 19:14:57 +0800 修改问题 Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载)

Ubuntu 18.04/16.04 安装破解 VCS 和 Verdi(转载) 本文以ubuntu 18.04为例,但16.04与18.04差异不大,操作步骤类似。 本文系转载,原文出处不详。 [TOC] 目录: 1. 简介 Ubu

2020-02-11 09:34:23 +0800 获得奖牌  受欢迎的问题 ()
2020-01-09 18:00:21 +0800 获得奖牌  受欢迎的问题 ()
2020-01-08 09:54:07 +0800 评论回答 MCU模拟JTAG接口对LATTICE CPLD进行在线编程加载

有在星球分享啊,如果你找不着,可以在星球向我提问。

2019-12-29 00:22:04 +0800 获得奖牌  热门的问题 ()