前言

  • 本科阶段,单纯以为硬件电路开发就是画画电路图,焊焊板子,跑跑程序等等…随着学习的深入,逐渐发现,硬件电路的开发也有一套严谨有序的开发流程。

  1. 需求分析是硬件电路设计的第一步,需要什么样的功能,功能实现的指标是我们首要考虑的。指标越高,所需要的成本也就越高。硬件电路设计的一个准则就是在性能和成本中寻求平衡。
  2. 设计算法,进行算法仿真。Matlab以其强大的数学运算能力为我们的科研生活带来了极大的便利。
  • 使用matlab进行波形,首先得验证我们使用的方法是否正确,我们先用matlab产生一个频率为1MHz的,来测试我们用以进行波形分析的代码!
clear;
Fs=2E7;
F=1E6;
N=60;
n=0:N-1;
t=n/Fs;
x=sin(2*pi*F*t);
y=fft(x,N);
y_abs=abs(y);
y1=abs(20*log10(y_abs));
y2=20*log10(y_abs);
f=(0:N-1)*Fs/N;
subplot(2,2,1:2),stem(t,x);
subplot(2,2,3),stem(f(1:N/2),y_abs(1:N/2));
subplot(2,2,4),stem(f(1:N/2),y2(1:N/2));

[外链图片转存中…(img-c990x779-1648537457579)]

 1. 正弦信号的频率为1MHz,采样频率为20MHz,60/(20/1)=3个整周期的采样点。2.  频谱图和增益图满足工程需求(噪声被压制在-300dB以下),所以可以用此方法进行后续的波形分析。

3.硬件电路仿真。以FPGA为例,芯片厂商都为自家的芯片开发了一系列硬件电路开发板和仿真软件。比如Altera的quartus,Xinlinx的ise。

  • 在未拿到实际的开发板之前,没有时钟激励,没有实际的导线,我们如何将所设计的程序跑起来呢,modelsim为我们提供了一个良好的仿真平台。下面设计一些基于modelsim的实验。

实验一 2补码的溢出回绕特性##

  • 知识背景:
    在有符号数中,最小值-1=最大值,最大值-1=最小值。我们称之为回绕wrap around。
    为什么最小值-1=最大值?这要从计算机内部数字表示形式开始,都是采用补码表示。
    补码表示有一些好处:
    1、 统一了0([0]补=0000;).
    2、 把减法都可以转换为加法。
    3、 良好的溢出性质
    补码加法:
    [x]补+[y]补=[x+y]补
    例:x=+1011;y=-0101;求x+y;
    解:[x]补=01011;[y]补=11011;
    [x]补   01011
    [y]补   11011
    [x+y]补 (进位1丢掉)00110
    结果为x+y=+0110;
    补码加法的特点:1是符号位要作为数的一部分参与运算,而是要在模2(n+1)的意义下相加,即超过2(n+1)要丢掉。
    实验验证2补码的溢出回绕特性
    先令两个有符号四位二进制数相加溢出,再将结果减去一个有符号四位二进制数,的最终运算结果,观察验证结果是否正确。

  • quartus代码片:

module lab1(a,b,c,sum);
input  signed [4-1:0] a,b,c;
output signed [4-1:0] sum;
assign sum = a + b + c;
endmodule
  • modelsim代码片
`timescale 1 ps/ 1 ps
module lab1_vlg_tst();
reg eachvec;
reg [3:0] a;
reg [3:0] b;
reg [3:0] c;
wire [3:0] sum;
lab1 i1 ( .a(a),.b(b),.c(c),.sum(sum)
);
initial
begin
a=1;
b=1;
c=1;
end
always
begin
#10 a=a+1;
b=b+2;
c=c+3;
end
endmodule
  • Modelsim仿真图

[外链图片转存中…(img-E01NdAXC-1648537457582)]

  • 实验分析:

有符号四位的范围为-8~7;由modelsim仿真图可以看出,4+7=11(溢出),4+7-6=5,结果正确,由此有验证了2补码的溢出回绕特性。

  • 占用资源图

[外链图片转存中…(img-wwqbCjDn-1648537457583)]

实验二 不同长度的2补码数据运算##

  • 实验验证:
    先设计一个无符号的三位二进制数a和一个有符号的四位二进制数b,a补一位和b相加得sum1,a补两位,b补一位,两者此时数据对齐,相加得sum2,观察sum1和sum2是否和正确一致。

  • quartus代码片:

module lab_2(a,b,c,sum1,sum2);
input           [2:0]a;
input  signed   [3:0]b;
output signed   [4:0]c;
output          [3:0]sum1;
output          [4:0]sum2;
reg             [4:0]c;
reg             [3:0]sum1;
reg             [4:0]sum2;always@(a or b or c  )
begin
c={2'b0,a};
sum1={1'b0,a}+b;
if(b[3]==0)
sum2=c+{1'b0,b};
else
sum2=c+{1'b1,b};
endendmodule
  • modelsim代码片:
module lab_2_vlg_tst();
reg eachvec;
reg       [2:0] a;
reg signed[3:0] b;
wire [3:0] sum1;
wire [4:0] sum2;
wire [4:0] c;lab_2 i1 ( .a(a),.b(b),.c(c),.sum1(sum1),.sum2(sum2)
);
initial
begin
a=0;
b=4'b1001;
end
always
begin
#10
a=a+1;
if(b==4'b0111)
b=4'b1001;
else
b=b+1;
end
endmodule
  • Modelsim仿真图
    [外链图片转存中…(img-DwvF8ftH-1648537457583)]

  • 实验分析

由modelsim仿真图可知,sum1部分结果正确,sum2结果完全正确,由此可知不同长度的2补码数据进行运算时,先进行符号扩展和数据对齐,然后再进行加、减法运算。

  • 占用资源图
    [外链图片转存中…(img-oQHLseJ8-1648537457583)]

实验三 2补码整数的乘法和加法运算##

  • 实验验证
    有符号的三位二进制数a和有符号的四位二进制数b相加得四位的二进制数s1;
    有符号的四位二进制数b和有符号的四位二进制数c相加得四位的二进制数s2和四位的二进制数s3;
    有符号的四位二进制数b和有符号的四位二进制数c相乘得四位二进制数m1,七位二进制数m2以及八位二进制数m3;

  • quartus代码片

module lab_3(a,b,s1,s2,s3,m1,m2,m3);
input  signed [2:0]a;
input  signed [3:0]b;
output signed [3:0]s1;
output signed [3:0]s2;
output signed [4:0]s3;
output        [5:0]m1;
output        [6:0]m2;
output        [7:0]m3;
reg           [3:0]s1;
reg           [3:0]s2;
reg           [4:0]s3;
reg           [3:0]m1;
reg           [6:0]m2;
reg           [7:0]m3;
parameter   signed  [3:0]c=4'b1001;always@(a or b )
begin
s1=a+b;
s2=b+c;
s3=b+c;
m1=b*c;
m2=b*c;
m3=b*c;
endendmodule
  • modelsim代码片
module lab_3_vlg_tst();
reg eachvec;
reg [2:0] a;
reg [3:0] b;
wire [3:0] m1;
wire [6:0] m2;
wire [7:0] m3;
wire [3:0] s1;
wire [3:0] s2;
wire [4:0] s3;lab_3 i1 (  .a(a),.b(b),.m1(m1),.m2(m2),.m3(m3),.s1(s1),.s2(s2),.s3(s3)
);
initial
begin
a=0;
b=4'b1001;
end
always
begin
#10
a=a+1;
if(b==4'b0111)
b=4'b1001;
else
b=b+2;
end
endmodule
  • modelsim仿真图
    [外链图片转存中…(img-U7eysS1e-1648537457584)]
  • 实验分析

通过modelsim仿真结果可看出,s2结果有错误,s3结果正确,这是因为两数相加可能会溢出,所以字长的选择应为字长长的被加数的字长加一; m1结果错误,m2和m3结果正确,两数相乘字长的选择为两个被乘数字长相加再减一;

  • 占用资源图
    [外链图片转存中…(img-6ZMrkDZv-1648537457584)]

  • 以quartus为例,开发平台cyclone III ,设计一个DDS.

 - 在FPGA上设计一个DDS模块,在DE0 开发板上运行,在FPGA芯片内部合成出数字波形即可。不用输出模拟信号,本模块满足以下条件- 使用板载晶振的50MHz时钟,合成以下频率的信号-  1MHz 正弦波信号。- 频率字字长32位,波表ROM尺寸为 10比特地址,1024个word。- 波形格式为2补码格式,12比特量化。- 每个CLK输出一个有效样点。- 输入信号为频率字和频率字输入使能信号。- 使用板载的拨码开关(Switch)控制生成的波形信号的不同频率。注意:波表ROM代码是用matlab或C打印生成的。不要手写。

手绘RTL图

[外链图片转存中…(img-BUhEXGYn-1648537457585)]

Quartus扫描 RTL图

SignalTap截图

  • 相位累加器输出
  • 波表ROM的输入地址
  • 输出正弦波形图

SW1=10时,选频1MHz
[外链图片转存中…(img-QB0rBKSN-1648537457586)]

–将SignalTapII抓取的ROMOUT值导出(Create SignalTapII List File),以便后续使用UltraEditor的列模式处理数据。

verilog代码

- 选频模块module freq_choice(
CLK,
FWEN,           //ENABLE
freq_in,
freq_out);
parameter VAL_FREQ_500K = 32'h028F_5C29;//32'd42949673
input         CLK;
input         FWEN;
input  [2-1:0]freq_in;
output [32-1:0]freq_out;
reg    [32-1:0]freq_out;always@(posedge CLK)beginif(FWEN)begincase(freq_in)2'b00:freq_out=0;              //NO OUTPUT 2'b01:freq_out=VAL_FREQ_500K;     //CHOOSE 500K2'b10:freq_out=VAL_FREQ_500K*2;  //CHOOSE 1M2'b11:freq_out=VAL_FREQ_500K*6;  //CHOOSE 3Mdefault:freq_out=0;      endcaseendelsefreq_out <= freq_out;          //HOLD ONend
endmodule
- 相位累加器模块module dds_core(CLK   ,   // CLOCK INCR  ,   // INCREASE  VALUE TEMP  , // TEMPORARY VALUECOUT);    // COUNTER   VALUE
input             CLK;
input      [31:0] INCR;
output reg [31:0] TEMP ;
output reg [9:0]  COUT;always @ (posedge CLK) beginTEMP <= INCR + TEMP;COUT<=TEMP[31:31-9];endendmodule   // module dds_core
- ROM码表// ************************************************************** //
// FILE    : DDS_CORE_ROM.v
// DSCP    : DDS CORE ROM FILE
// ABOUT   : auto generated rom file by gen_rom_rtl.m
// ************************************************************** //
// module DDS_CORE_ROM()
module DDS_CORE_ROM(CLK    ,           // clockRA     ,           // read addressRD     );          // read data
input          CLK;
input  [9  :0] RA;
output [11 :0] RD;
reg    [11 :0] RD;
always @ (posedge CLK)case(RA)10'd 0     :RD = #1 12'b 000000000000; //      0 0x0 10'd 1     :RD = #1 12'b 000000001100; //     12 0xC 10'd 2     :RD = #1 12'b 000000011001; //     25 0x19 10'd 3     :RD = #1 12'b 000000100101; //     37 0x25 10'd 4     :RD = #1 12'b 000000110010; //     50 0x32 10'd 5     :RD = #1 12'b 000000111110; //     62 0x3E 10'd 6     :RD = #1 12'b 000001001011; //     75 0x4B 10'd 7     :RD = #1 12'b 000001010111; //     87 0x57 10'd 8     :RD = #1 12'b 000001100100; //    100 0x64 10'd 9     :RD = #1 12'b 000001110000; //    112 0x70 ......default : RD = #1 0;endcase
endmodule

MATLAB生成ROM代码 由杜伟韬老师设计,参见本人博客——http://blog.csdn.net/qaseesaq/article/details/55261389

将FPGA导出的数据导入到matlab中进行波形分析:

clc;
clear;
f_1M
x=transpose(ROMOUT)/512;
Fs=50E6;
F=1E6;
N=1024;
n=0:N-1;
t=n;
% x=sin(2*pi*F*t);
y=fftshift(fft(x,N));
y_abs=abs(y);
y1=20*log10(y_abs);
%y2=20*log10(y_abs);
% f=(0:N-1)*Fs/N;
f=linspace(-(Fs/2),(Fs/2),N);
subplot(4,4,1:4),plot(t,x);
title('Sine Signal', 'fontsize',14);
grid on;  %添加网格线
title('Sampled Sine Signal(Partially displayed)', 'fontsize',14);  %改变标题字体的大小至14subplot(4,4,5:8);
stem(x);
xlim([100,200]);
grid on;  %添加网格线
title('Sampled Sine Signal(Partially displayed)', 'fontsize',14);  %改变标题字体的大小至14subplot(4,4,9:12),plot(f,y_abs);
grid on;
title('DFT Amplitude in Linear scale', 'fontsize',14);
xlabel('Frequency(Hz)');  ylabel('Magnitude');subplot(4,4,13:16),plot(f,y1);
grid on;
title('DFT Amplitude in dB scale','fontsize',14);
xlabel('Frequency(Hz)'); ylabel('Magnitude(dB)');
  • 波形图
    [外链图片转存中…(img-Da8GUXkA-1648537457586)]

    • FPGA的时钟为50MHz,所以输出的点为采样频率为50MHz采集出来的。假设输出频率为1MHz,则matlab波形应该显示1024/(50/1)=20.48个周期采样点,频谱图应为两根分别在-1MHz和1MHz两个竖线。但实际频谱图不是两根笔直的谱线,出现了频谱泄漏,这是由于采样点数不为整周期采样点数造成的。
  • 改善测试方法:1.将采样点数选为整数个周期点数。2。加窗来改善频谱泄漏。

    • 将采样点数选为1000个点
clc;
clear;
f_1M_test
x1=transpose(ROMOUT)/5120;
%kaiser_Beta=0.5;
Fs=50E6;
F=1E6;
N=1000;
%win=kaiser(N,kaiser_Beta);
%x1=x'.*win;
n=0:N-1;
t=n;
% x=sin(2*pi*F*t);
y=fftshift(fft(x1,N));
y_abs=abs(y);
y1=20*log10(y_abs);
%y2=20*log10(y_abs);
% f=(0:N-1)*Fs/N;
f=linspace(-(Fs/2),(Fs/2),N);
subplot(4,4,1:4),plot(t,x1);
title('Sine Signal', 'fontsize',14);
grid on;  %添加网格线
title('Sampled Sine Signal(Partially displayed)', 'fontsize',14);  %改变标题字体的大小至14subplot(4,4,5:8);
stem(x1);
xlim([100,200]);
grid on;  %添加网格线
title('Sampled Sine Signal(Partially displayed)', 'fontsize',14);  %改变标题字体的大小至14subplot(4,4,9:12),plot(f,y_abs);
grid on;
title('DFT Amplitude in Linear scale', 'fontsize',14);
xlabel('Frequency(Hz)');  ylabel('Magnitude');subplot(4,4,13:16),stem(f,y1);
grid on;
title('DFT Amplitude in dB scale','fontsize',14);
xlabel('Frequency(Hz)'); ylabel('Magnitude(dB)');

[外链图片转存中…(img-qUsiFsRI-1648537457586)]

 - 波形非常好,基本上为两条笔直的谱线,但还是有一些噪声,这是由于DDS算法造成的误差。
  • 加凯泽窗
clc;
clear;
f_1M
x=transpose(ROMOUT)/5120;
kaiser_Beta=10;
Fs=50E6;
F=1E6;
N=1000;
win=kaiser(N,kaiser_Beta);
x1=x'.*win;
n=0:N-1;
t=n;
% x=sin(2*pi*F*t);
y=fftshift(fft(x1,N));
y_abs=abs(y);
y1=20*log10(y_abs);
%y2=20*log10(y_abs);
% f=(0:N-1)*Fs/N;
f=linspace(-(Fs/2),(Fs/2),N);
subplot(4,4,1:4),plot(t,x1);
title('Sine Signal', 'fontsize',14);
grid on;  %添加网格线
title('Sampled Sine Signal(Partially displayed)', 'fontsize',14);  %改变标题字体的大小至14
subplot(4,4,5:8);
stem(x1);
xlim([100,200]);
grid on;  %添加网格线
title('Sampled Sine Signal(Partially displayed)', 'fontsize',14);  %改变标题字体的大小至14subplot(4,4,9:12),plot(f,y_abs);
grid on;
title('DFT Amplitude in Linear scale', 'fontsize',14);
xlabel('Frequency(Hz)');  ylabel('Magnitude');subplot(4,4,13:16),stem(f,y1);
grid on;
title('DFT Amplitude in dB scale','fontsize',14);
xlabel('Frequency(Hz)'); ylabel('Magnitude(dB)');

[外链图片转存中…(img-1GSBRs8L-1648537457587)]

--加上凯泽窗后,频谱泄漏的情况得到了改善,频域分辨率提高,看到了更多的频率细节。
总结:虽然对整数个周期样点进行matlab分析,能得到更真实的波形,但工程上,并不能保证我们采集的
样点点数都满足整数个周期,我们通常都选取加入合适的窗函数来对实验数据进行观测。
  • 以xinlinx为例,比如我们对Spartan6进行开发,首先要对其进行功能验证。我们选取FPGA开发板Mis603A作为测试平台。开发软件为Xinlinx的ISE

    • 实例一

      • 测试发送端和接收端之间是否正常通信。
      • 验证方案:一个功能是发送端相接收端发8位的信息,然后接收的信息和目标信息进行比对,相同的话,接收端计数器加一,否则接收端保持不变。代码量不大,半个小时就可完成。
`timescale 1ns / 1ps
//
// Company: cuc_ecdav_604c
// Designer name:JuHan
// E-mail:1107033204@qq.com
// Create Date:    11:07:19 07/13/2017
// Design Name:
// Module Name:    test_8bit
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module test_8bit(input      sys_rst,input      sys_clk,input       [7:0]rec,output     [7:0]trn,output     [3:0]cnt);parameter  TARGET = 8'h0A;wire    [7:0]rec_reg;
reg      [7:0]trn_reg;
reg      [3:0]cnt_reg;//transmit message
always@(posedge sys_clk or negedge sys_rst)
beginif(sys_rst==0)begintrn_reg[7:0]<=trn_reg[7:0]+8'h1;endelsetrn_reg[7:0]<=0;
endalways@(posedge sys_clk or negedge sys_rst)
beginif(sys_rst==0)beginif(rec_reg[7:0]%TARGET==0)//每隔十加一begincnt_reg[3:0]<=cnt_reg[3:0]+4'h1;endelsecnt_reg[3:0]<=cnt_reg[3:0];endelsecnt_reg[3:0]<=0;
endassign rec_reg[7:0]    =rec[7:0];
assign     trn[7:0]    =trn_reg[7:0];
assign     cnt[3:0]    =cnt_reg[3:0];
endmodule

  • 主要时间都花在波形仿真验证上

    • 方法一:测试波形法
    • 方法二:测试代码法
      • 测试代码法采用的是Testbench。
      • Testbench相当于一个测试平台,给输入加激励,把输出端和另外一个输出端相连。(具体描述还得查查再写)
        首先在工程管理区将“Sources for”设置为Behavioral Simulation,在任意位置单击鼠标右键,并在弹出的菜单中选择“New Source”命令,然后选中“Verilog Test Fixture”类型,输入文件名为“test_test”,再点击“Next”进入下一页。这时,工程中所有Verilog Module的名称都会显示出来,设计人员需要选择要进行测试的模块。用鼠标选中test,点击“Next”后进入下一页,直接点击“Finish”按键,ISE会在源代码编辑区自动显示测试模块的代码。
`timescale 1ns / 1ps// Company: cuc_ecdav_604c
// Designer name:JuHan
// E-mail:1107033204@qq.com
// Create Date:   17:29:22 07/14/2017
// Design Name:   test_8bit
// Module Name:   D:/My_study/master_study/difference/test_8bit/test_test.v
// Project Name:  test_8bit
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: test_8bit
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// module test_test;// Inputsreg sys_rst;reg sys_clk;// Outputswire [7:0] trn;wire [3:0] cnt;// Instantiate the Unit Under Test (UUT)test_8bit uut (.sys_rst(sys_rst), .sys_clk(sys_clk), .rec(trn), .trn(trn), .cnt(cnt));initial begin// Initialize Inputssys_rst = 1;#10;       sys_clk = 0;#10;sys_clk = 1;#10;sys_rst = 0;end// Wait 100 ns for global reset to finishalwaysbegin#10 sys_clk = !sys_clk; end // Add stimulus hereEndmodule
  • 测试波形:
    [外链图片转存中…(img-KrfMMlC5-1648537457587)]
  • 波形显示接收端每接收十个数据,计数器cnt就会加一。此外,接收端在第一个时刻时,cnt就加一,原因是0/10=0,符合if的判断条件,所以计数器加一。

4.功能验证。当样板制作完成后,就要进行功能的验证,确保设计的电路板能投入实际环境使用。

  • 最终投入是生产的是样板而不是我们进行电路开发的开发板,所以我们需要对焊接好的电路板进行功能验证。
  • 以xinlinx的ise为例。
    • 环境:windows7
    • 软件:ISE10.1 和 Fabric Configuration
  • 测试FPGA与GPIO之间是否连通。
  • 验证方案:通过引入计数器,实现分频,然后观测各个端口的波形是否正确。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:    18:19:22 03/24/2017
// Design Name:
// Module Name:    test
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module control3_5(//input RST,input CLK,output DIR,output EN,output [4:0] FP_T,output [4:0] FP_A);
reg [4:0] FP_T_R;
reg [4:0] FP_A_R;
always@(posedge CLK )
beginFP_T_R[4:0]<=FP_T_R[4:0]+1;FP_A_R[4:0]<=FP_A_R[4:0]+1;
end
assign FP_T[4:0]=FP_T_R[4:0];
assign FP_A[4:0]=FP_A_R[4:0];
assign DIR=1'b1;
assign EN=1'b0;
endmodule

  1. 综合
    在Processes区域中,选择Synthesize – XST,右键点击Run。综合完成后,Synthesize – XST前面会出现绿色的对勾。表示综合完成且没有任何错误和警告。
  2. 实现
    在Processes区域中,选择Implement Design,右键点击Run。连续执行翻译Translate、映射Map、布局布线Place & Route工作。
  3. 产生编程文件
    在Processes区域中,选择Generate Programming File,右键点击Run。运行成功后会产生.bit文件。
    [外链图片转存中…(img-xiN0QOhl-1648537457588)]

上述三步完成效果图:


4. 下载编程文件
由于使用的是xilinx改造的国产化芯片,所以不能直接通过ISE将.bit文件上传到FPGA上。需借助Fabric Configuration生成.sbit文件,上传到FPGA上。


  • 打开Fabric Configuration,右键点击右边的空白框,点击initialize chain,初始化JTAG,找到目标FPGA。

[外链图片转存中…(img-FvBN6Ufp-1648537457589)]

  • 成功找到目标FPGA后,空白框会出现目标FPGA,并弹出.bit文件所在的文件夹,用以上传程序。

[外链图片转存中…(img-Wo2bMmOC-1648537457590)]

  • 我们需要的是.sbit文件,所以点击导航栏中Output,点击下拉菜单中的xilinx file to SSMEC
    文件,在弹出的窗口中选中之前生成的.bit文件,将.bit文件转换为.sbit文件。

    [外链图片转存中…(img-IssKLsAc-1648537457590)]

  • 再次鼠标右键点击空白框,点击initialize chain 初始化JTAG,在弹出的窗口中,我们可以看到.bit文件和.sbit文件。

[外链图片转存中…(img-7y1HYqwR-1648537457590)]

  • 选中. sbit文件并点击打开。可以发现红色字体部分发生了改变,改为我们上传的.sbit文件名。

[外链图片转存中…(img-drmnMx5w-1648537457591)]

  • 选中绿色FPGA部分,点击右键会弹出下拉菜单,选中Program。
    [外链图片转存中…(img-WycEJrDC-1648537457591)]

  • Program成功,上传编程部分至此成功完成

[外链图片转存中…(img-HJDVEiEi-1648537457591)]


配置ChipScope Pro Core Inserter

  • 添加ChipScope Core Inserter工程文件

[外链图片转存中…(img-9WVzd8Gd-1648537457592)]

[外链图片转存中…(img-RPfyHm6v-1648537457592)]

  • 选择需要观察内部信号的源文件

[外链图片转存中…(img-SKxLDYw8-1648537457593)]

[外链图片转存中…(img-0y8uzMWt-1648537457593)]

  • 工程中出现control3_5.cdc文件。

  • 双击control3_5.cdc,开始配置control3_5.cdc文件。

[外链图片转存中…(img-PgY0u2iA-1648537457594)]

  • Next后。

[外链图片转存中…(img-mlSberGE-1648537457595)]

  • Next后,配置Trigger Width,Match Units 和Counter Width。

[外链图片转存中…(img-qKGYj9Lq-1648537457595)]

  • Next后,配置Data Depth(采样深度)

[外链图片转存中…(img-ojl8pEG3-1648537457596)]

  • Next后,配置Net Connection,此时Net Connection中的字符都为红色,说明未配置成功。点击Modify
    Connection开始配置。

[外链图片转存中…(img-WOaEVCgP-1648537457596)]

  • 在左下角中选择信号,在右边的框中选择通道序号,点击make connection完成匹配。信号分两种:时钟信号和触发或则数据信号。

[外链图片转存中…(img-kUBIJGh8-1648537457597)]
[外链图片转存中…(img-rr3gHvBF-1648537457597)]

  • 完成配置后,Net Connection中的字符都为黑色,说明配置成功。

[外链图片转存中…(img-T0ikH1Bv-1648537457598)]

  • 点击Return to project Navigator,保存退出配置界面。

[外链图片转存中…(img-dkUNHgda-1648537457598)]

  • 重新实现、产生编程文件,上传.sbit到FPGA中,上文有介绍,此处不再赘述。

[外链图片转存中…(img-2yPULEiW-1648537457599)]

  • 成功上传.sbit文件并Program后,在ise中的Processes选中Analyze Design using Chipscope,右键点击,选择下拉菜单中的run开始Chipscope pro Analyze的配置。

[外链图片转存中…(img-EzHGmujJ-1648537457599)]

  • 点击蓝色标记处的按钮,查找JTAG链。

[外链图片转存中…(img-d45SCy19-1648537457600)]

  • 查找成功后,显示设备名称。

[外链图片转存中…(img-TloqW1sR-1648537457601)]

  • 点击OK后。

[外链图片转存中…(img-dKXbYIZX-1648537457601)]

  • 在file——>import完成引入信号操作。

[外链图片转存中…(img-Ndf6e58a-1648537457602)]

  • 选择.cdc文件。

[外链图片转存中…(img-ZiwEyDxT-1648537457603)]

  • 蓝色框中字符发生变化。

[外链图片转存中…(img-gHMvGMLi-1648537457603)]

点击导航栏中黑三角按钮开始数据的抓取。

[外链图片转存中…(img-KI1LBh3Z-1648537457603)]

硬件电路设计报告总结相关推荐

  1. 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...

    基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...

  2. 温度指示报警电路设计报告

    运算放大器温度指示及报警电路设计PPT讲解 温度指示报警器实物测试 摘要 温度指示电路是在实际应用中十分广泛的测量电路之一.本设计主要运用基本的模拟电子技术基础和传感器原理的知识,从基本的元器件出发, ...

  3. 真安卓机皇!华为P30 Pro包揽《智能硬件质量报告》多项大奖

    在6月27日上海MWC世界移动通信大会上,中国移动公布了<中国移动智能硬件质量报告>,华为P30 系列包揽三项大奖:手机综合评测排行榜3500+档位,华为P30 Pro荣获冠军:拍照和视频 ...

  4. TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出

    一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...

  5. 基于STM32-消防栓监测系统毕业设计---论文(附加最全面的从硬件电路设计->驱动程序设计->阿里云物联网搭建->安卓APP设计)

    设计展示视频连接:消防栓监测系统视频 驱动程序工程文件:消防栓监测系统驱动程序工程(全寄存器开发的) 消防栓监测系统所有设计资料:全栈设计,如下图所示 消防栓监测系统论文(图片看不清的可以下载文档看) ...

  6. 一套完整的硬件电路设计该怎么做?

    在学习电路设计的时候,不知道你是否有这样的困扰:明明自己学了很多硬件电路理论,也做过了一些基础操作实践,但还是无法设计出自己理想的电路.归根结底,我们缺少的是硬件电路设计的思路,以及项目实战经验. 设 ...

  7. 硬件电路设计原理图设计

    叶倾城-硬件原创的个人空间_哔哩哔哩_Bilibili 硬件电路设计原理图设计第二季-1-40课已更新完成啦!!! 第三季硬件电路设计原理图设计敬请期待!感谢大家的支持! 第01课------硬件实战 ...

  8. 一套完整的硬件电路设计该怎么做

    在学习电路设计的时候,不知道你是否有这样的困扰:明明自己学了很多硬件电路理论,也做过了一些基础操作实践,但还是无法设计出自己理想的电路.归根结底,我们缺少的是硬件电路设计的思路,以及项目实战经验. 设 ...

  9. WS2812硬件电路设计

    WS2812硬件电路设计 小菜鸡的第一篇的CSDN文章,冲冲冲!!! 设计目标: 1.RGB可实现多种灯效,可通过按键切换: 2.RGB灯珠亮度可调节: 3.选用蓝牙或者wifi模块,通过手机远程设置 ...

最新文章

  1. Ubuntu架设FTP
  2. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732EM电磁流量计变送器如何接线!
  3. 天兔(Lepus)监控邮件推送安装配置
  4. EFCore 5 新特性 Savepoints
  5. 使用OLE DB方式连接常用数据库的连接字符串的设置
  6. 安徽破获以虚拟数字货币增值为幌子网络传销案,涉案逾2亿元
  7. GHOST镜像导入VHD的虚拟机
  8. java基础 第十一章(多态、抽象类、接口、包装类、String)
  9. 到外企应聘如何准备英文简历(Tips for Resume)
  10. java http 401_401 API请求状态错误
  11. true launch bar 和 editplus
  12. Elasticsearch Index按日期切割并使用ILM Rollover
  13. 再见,Python正则表达式!
  14. linux 加固检测脚本,Linux系统检测和防护脚本
  15. mysql error unpacking_linux 安装 mysql rpm包出现error: unpacking of archive failed on file
  16. 使用Fragment实现Tab效果
  17. 生信识图之 点图进阶-6(UMAP)
  18. webexam php,Laravel View Composer - 当 include 一个模板时,自动获取其所需的变量
  19. MHP3内存修改辅助工具
  20. 电脑神器(三):三行代码实现微信多开

热门文章

  1. python自定义加减乘除函数实现加减乘除_Python实现高精度加减乘除运算
  2. 设计模式之模板方法模式、策略模式、命令模式、责任链模式、状态模式
  3. 人工智能带来的产权法律新问题
  4. 关于产品的一些思考——腾讯之UIDesigner
  5. 产品细节中的情感化设计
  6. 单片机应用技术c语言版第4版答案,单片机应用技术(C语言版)第4版
  7. 简易Web服务器实现
  8. 爬取高德地图poi数据
  9. Flask 的 jsonify
  10. 592.分数加减运算 纯纯的数学题,Python 7行代码+详细思路分享!