当前位置:   article > 正文

【【手把手教你修改Risc-V源码完成流水灯的设计】】

risc-v源码

在完成了上一个在FPGA上搭建Risc-v的实验之后,我们可以修改源码来实现自主想要完成的功能
首先实现流水灯 需要用到GPIO端口 那么修改XDC文件将GPIO端口绑定至LED灯上
另外另外 上一节修改的源码 关于如何下载的依旧是需要的这里再说明一下
而TinyRisc-V的LED灯是低电平 所以我们需要修改源码,将其变为高电平。
在顶层里修改
(当然其实这里都不需要改 因为我们将这两个灯用来实现流水灯了 所以 这里没必要改 )(无用之举)
在这里插入图片描述

修改之后使其能够正常点灯
在这里插入图片描述

接下来修改串口tx和 rx信号引脚绑定
这里想要说明的是 其实绝大部分都可以绑定空的引脚,但是一定要绑定,不绑定过不了验证。 我们想要实现某些功能,让它表现出来,最好的办法就是输出在LED灯上。
由于达芬奇开发板没有拨码和自锁开关,并且未按下时按键端口输出高电平,按下时输出低电平。因为这里是高电位启动,所以我们需要修改代码,绑定至key0
(这里的唯一的作用是为了下载 摁下按键就启用下载)
在这里插入图片描述

修改后为
在这里插入图片描述

下面开始的设计才是这次流水灯设计相关的
首先修改XDC将GPIO绑定完成 修改后的XDC 如下显示

# 时钟约束50MHz,占空比50%
create_clock -add -name sys_clk_pin -period 20.00 -waveform {0 10} [get_ports {clk}];

# 时钟引脚
set_property -dict { PACKAGE_PIN R4 IOSTANDARD LVCMOS33 } [get_ports {clk}]; 

# 复位引脚
set_property -dict { PACKAGE_PIN U2 IOSTANDARD LVCMOS33 } [get_ports {rst}]; 

# 程序执行完毕指示引脚 任意空管脚
set_property -dict { PACKAGE_PIN F15 IOSTANDARD LVCMOS33 } [get_ports {over}]; 

# 程序执行成功指示引脚    任意空管脚
set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports {succ}]; 

# CPU停住指示引脚   任意空管脚
set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports {halted_ind}]; 

# 串口下载使能引脚,由于没有拨码开关和自锁开关,所以绑定到key0上,key0按住不放时才使能串口下载
set_property -dict { PACKAGE_PIN T1 IOSTANDARD LVCMOS33 } [get_ports {uart_debug_pin}]; 

# 串口发送引脚
set_property -dict { PACKAGE_PIN AB6 IOSTANDARD LVCMOS33 } [get_ports {uart_tx_pin}]; 

# 串口接收引脚
set_property -dict { PACKAGE_PIN V7 IOSTANDARD LVCMOS33 } [get_ports {uart_rx_pin}]; 

# GPIO0引脚
set_property -dict { PACKAGE_PIN R2 IOSTANDARD LVCMOS33 } [get_ports {gpio[0]}]; 

# GPIO1引脚
set_property -dict { PACKAGE_PIN R3 IOSTANDARD LVCMOS33 } [get_ports {gpio[1]}]; 

# GPIO2引脚
set_property -dict { PACKAGE_PIN V2 IOSTANDARD LVCMOS33 } [get_ports {gpio[2]}]; 

# GPIO3引脚
set_property -dict { PACKAGE_PIN V3 IOSTANDARD LVCMOS33 } [get_ports {gpio[3]}]; 

# JTAG TCK引脚  PortA 0
set_property -dict { PACKAGE_PIN AA8 IOSTANDARD LVCMOS33 } [get_ports {jtag_TCK}]; 

create_clock -name jtag_clk_pin -period 300 [get_ports {jtag_TCK}];
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets jtag_TCK]


# JTAG TMS引脚 PortA 3
set_property -dict { PACKAGE_PIN AB8 IOSTANDARD LVCMOS33 } [get_ports jtag_TMS]; 

# JTAG TDI引脚 PortA 1
set_property -dict { PACKAGE_PIN Y7 IOSTANDARD LVCMOS33 } [get_ports {jtag_TDI}]; 

# JTAG TDO引脚 PortA 2
set_property -dict { PACKAGE_PIN Y8 IOSTANDARD LVCMOS33 } [get_ports jtag_TDO]; 

# SPI MISO引脚
set_property -dict { PACKAGE_PIN F14 IOSTANDARD LVCMOS33 } [get_ports {spi_miso}]; 

# SPI MOSI引脚
set_property -dict { PACKAGE_PIN F13 IOSTANDARD LVCMOS33 } [get_ports {spi_mosi}]; 

# SPI SS引脚
set_property -dict { PACKAGE_PIN E13 IOSTANDARD LVCMOS33 } [get_ports {spi_ss}]; 

# SPI CLK引脚
set_property -dict { PACKAGE_PIN E14 IOSTANDARD LVCMOS33 } [get_ports {spi_clk}]; 

#SPI 相关设置
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

再修改rtl代码下的top文件
在这里插入图片描述

修改至[3:0]
在这里插入图片描述

还有的是
在这里插入图片描述

修改至
在这里插入图片描述

对于gpio.c修改
在这里插入图片描述

在软件端进行调节
为了不修改makefile 增加简易程度 我们直接在例程上的gpio进行修改
(其实重启一个新的文件构建一个makefile也行 只要整体结构简单)
以simple.c为例

...
2 TARGET = simple
4 CFLAGS += -DSIMULATION
5 #CFLAGS += -O2
6 #ASM_SRCS +=
7 #LDFLAGS +=
8 #INCLUDES += -I.
10 C_SRCS := 
11     main.c \
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

修改第2行,这个TARGET就是程序编译后生成的bin文件名字,这里是simple.bin。
修改第4行,CFLAGS是编译选项,这里的simple例程默认作为仿真使用,所以需要定义SIMULATION宏。
修改第6行,将需要编译的汇编文件全部添加到这里。
修改第8行,将涉及的头文件路径全部添加到这里。
修改第10行,将需要编译的c文件全部添加到这里。

好了好了扯远了我们打开自带的GPIO文件
在这里插入图片描述

修改这个
在这里插入图片描述

#include <stdint.h>
#include "../include/gpio.h"
#include "../include/utils.h"
int main()
{
GPIO_REG(GPIO_CTRL) |= 0x55;       // gpio0输出模式 01 01 01 01
int sum1 = 1; // 0001
int sum2 = 2; // 0010
int sum3 = 4; // 0100
int sum4 = 8; // 1000
int* gpio_data = (int*) 0x40000004;



 while (1) {

       // *gpio_data = sum1;

GPIO_REG(GPIO_DATA) = sum4 ;
for(int i = 0; i < 1000000; i++); // delay
    // 第二个灯亮起
   // *gpio_data = sum2;

GPIO_REG(GPIO_DATA) = sum3 ;
for(int i = 0; i < 1000000; i++); // delay
    // 第三个灯亮起
   // *gpio_data = sum3;

GPIO_REG(GPIO_DATA) = sum2 ;
for(int i = 0; i < 1000000; i++); // delay
    // 第四个灯亮起
   // *gpio_data = sum4;

GPIO_REG(GPIO_DATA) = sum1 ;
for(int i = 0; i < 1000000; i++); // delay
}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

在终端输入make 产生.bin文件
在这里插入图片描述

介绍一下 我们点击 上一层目录的include 下的 gpio.h
其实软件总是和硬件息息相关的
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/979650
推荐阅读
相关标签
  

闽ICP备14008679号